按列值快速拆分pandas数据帧

时间:2016-02-29 15:04:12

标签: python pandas

我有一个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)

然而它运行非常慢。有没有更快的方法来完成这项任务?

1 个答案:

答案 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')}