Python 通过将分组类别转换为字段来转换分组数据(使用GraphLab或Panda的数据框)
我有以下按用户id和操作列分组的记录Python 通过将分组类别转换为字段来转换分组数据(使用GraphLab或Panda的数据框),python,pandas,dataframe,graphlab,sframe,Python,Pandas,Dataframe,Graphlab,Sframe,我有以下按用户id和操作列分组的记录 user_id | action | count 1 | read | 15 1 | write | 5 1 | delete | 7 2 | write | 2 3 | read | 9 3 | write | 1 3 | delete | 2 我想将此表转换为以下格式,其中每个操作现在都是一列,行是计数值 user_id | read | write |
user_id | action | count
1 | read | 15
1 | write | 5
1 | delete | 7
2 | write | 2
3 | read | 9
3 | write | 1
3 | delete | 2
我想将此表转换为以下格式,其中每个操作现在都是一列,行是计数值
user_id | read | write | delete
1 | 15 | 5 | 7
2 | 0 | 2 | 0
3 | 9 | 1 | 2
我知道如何使用循环来实现这一点,但我很好奇在GraphLab create SFrame或Panda的DataFrame中是否有更有效的方法来实现这一点
谢谢你的帮助 您可以
pivot
it:
df.pivot_table('count', 'user_id', 'action', fill_value=0)
您可以
透视它:
df.pivot_table('count', 'user_id', 'action', fill_value=0)
您可以通过以下方式使用with和last castfloat
到int
:
另一个解决方案包括和:
如果列seru id
和action
和pivot
或unstack
中的重复项无法使用,则解决方案与聚合器一起使用,并通过以下方式进行重塑:
时间:
#random dataframe
np.random.seed(100)
N = 10000
df = pd.DataFrame(np.random.randint(100, size=(N,3)), columns=['user_id','action', 'count'])
#[10000000 rows x 2 columns]
print (df)
In [124]: %timeit (df.groupby(['user_id','action'])['count'].mean().unstack(fill_value=0))
100 loops, best of 3: 5.5 ms per loop
In [125]: %timeit (df.pivot_table('count', 'user_id', 'action', fill_value=0))
10 loops, best of 3: 35.9 ms per loop
您可以通过以下方式使用with和last castfloat
到int
:
另一个解决方案包括和:
如果列seru id
和action
和pivot
或unstack
中的重复项无法使用,则解决方案与聚合器一起使用,并通过以下方式进行重塑:
时间:
#random dataframe
np.random.seed(100)
N = 10000
df = pd.DataFrame(np.random.randint(100, size=(N,3)), columns=['user_id','action', 'count'])
#[10000000 rows x 2 columns]
print (df)
In [124]: %timeit (df.groupby(['user_id','action'])['count'].mean().unstack(fill_value=0))
100 loops, best of 3: 5.5 ms per loop
In [125]: %timeit (df.pivot_table('count', 'user_id', 'action', fill_value=0))
10 loops, best of 3: 35.9 ms per loop
#random dataframe
np.random.seed(100)
N = 10000
df = pd.DataFrame(np.random.randint(100, size=(N,3)), columns=['user_id','action', 'count'])
#[10000000 rows x 2 columns]
print (df)
In [124]: %timeit (df.groupby(['user_id','action'])['count'].mean().unstack(fill_value=0))
100 loops, best of 3: 5.5 ms per loop
In [125]: %timeit (df.pivot_table('count', 'user_id', 'action', fill_value=0))
10 loops, best of 3: 35.9 ms per loop