迭代pandas数据帧的分组结果并对每个组进行操作

时间:2016-01-14 05:31:23

标签: python pandas group-by

我有一个数据帧2 * N

eventcode filename
ET0001    A.csv
ET0001    B.csv
ET0002    C.csv
ET0002    D.csv
ET0002    E.csv
ET0003    F.csv
ET0003    G.csv

我需要迭代,对于每个事件代码组,我想读取组中的每个.csv文件,并将它们附加到最终的数据框。

在这种情况下,我需要像

这样的东西
ET0001 df_AB.csv    ###(name is like this but actually they formed after appending A.csv and B.csv)
ET0002 df_CDE.csv
ET0003 df_FG.csv

我尝试过的是

合并功能

 def finalmerge(d):
     dff = pd.read_csv(str(d))
     v = dff.append(dff,ignore_index=True)
     return v

然后进行灌木和迭代

g = df.groupby('EVENT_CODE')
for name, group in g:
    f = group['filename'].apply(finalmerge)

但没有得到预期。

可以在不使用groupby的情况下完成,但很抱歉,我没有得到它,所以尝试使用groupby。

请建议一个代码示例。使用groupby或不使用group by。

2 个答案:

答案 0 :(得分:3)

您可以从concat每组DataFrame的函数开始:

def generate_dataframes_of_group(g):
    return pd.concat([pd.read_csv(f) for f in g.filename.values])

然后只需groupbyapply

df.groupby(df.eventcode).apply(generate_dataframes_of_groups)

答案 1 :(得分:0)

应用2嵌套for循环并解决

for x in df['EVENT_CODE'].unique():
       df1 = df[df['EVENT_CODE'] == x]
       c = pd.DataFrame(columns=df1.columns)
       for file in df1['filename']:
           d = pd.read_csv(str(file))
           c = c.append(d,ignore_index=True)

如果c是从第二个for循环过滤掉的。我得到了附加文件。