我在一个文件夹中有多个CSV,我正在将其作为数据帧读取,然后在for循环中循环
df1=pd.DataFrame({"year":[2008,2008,2009,2008,2009],
"product":["wood","paper","rocks","rocks","mint"],
"cost":[200,300,90,78,300]})
df2=pd.DataFrame({"year":[2008,2008,2009,2008,2009],
"product":["grass","wood","mint","sand","bottle"],
"cost":[900,309,908,178,90]})
我想创建一个名为“ summary_report”的数据框,同时循环这些数据框并存储在summary_report数据框中。
忽略颜色
预期报告:
汇总,每年在列和数据框名称中都有唯一的产品计数和成本。
使用concat
与区分每个数据帧,新的栏目,然后传递到GroupBy.agg
和最后重塑的DataFrame.stack
和Series.unstack
:
df = (pd.concat([df1.assign(g = 'df1'), df2.assign(g = 'df2')])
.groupby(['g','year'])
.agg(product_count=('product', 'size'),
cost_total=('cost','sum'))
.stack()
.unstack([1,2]))
print (df)
year 2008 2009
product_count cost_total product_count cost_total
g
df1 3 578 2 390
df2 3 1387 2 998
编辑:
dfs = [pd.read_csv(file).assign(g = f'df{i}')
for i, file in enumerate(os.listdir(path), 1) if ".csv" in file]
df = (pd.concat(dfs)
.groupby(['g','year'])
.agg(product_count=('product', 'size'),
cost_total=('cost','sum'))
.stack()
.unstack([1,2]))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句