我有一个pandas数据帧:
0 1
0 john 14
1 jack 2
2 emma 6
3 john 23
4 john 53
5 jack 43
真的很大(1 + GB)。我希望按名称拆分数据框并在每个结果数据帧上执行代码。这是我的代码,有效:
df.sort(columns=[0], inplace=True)
df.set_index(keys=[0], drop=False, inplace=True)
names = df[0].unique().tolist()
for name in names:
name_df = df.loc[df[0] == name]
do_stuff(name_df)
然而它运行非常慢。有没有更快的方法来完成这项任务?
答案 0 :(得分:0)
这是一个字典理解示例,它只是将按名称分组的每个子数据帧加在一起:
>>> {k: gb['1'].sum() for k, gb in df.groupby('0')}
{'emma': 6, 'jack': 45, 'john': 90}
对于更复杂的事情,您可以创建一个函数,然后将其应用于该组。
def foo(df):
df += 1
df *= 2
df = df.sum()
return df
{k: g['1'].apply(foo) for k, g in df.groupby('0')}