我有一个数据帧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。
答案 0 :(得分:3)
您可以从concat
每组DataFrame
的函数开始:
def generate_dataframes_of_group(g):
return pd.concat([pd.read_csv(f) for f in g.filename.values])
然后只需groupby
和apply
:
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循环过滤掉的。我得到了附加文件。