我有一本字典,其中key是一个文件名,而值是如下所示的数据帧:

col1     col2
A        10
B        20
A        20
A        10
B        10


我想基于'col1'进行分组,将'col2'中的值求和并将其存储到新的数据帧'df'中,其输出应类似于:

输出应如下所示:

Index    A      B
file1     40     30
file2     50     35


我的代码:

df=pd.DataFrame(columns=['A','B'])
for key, value in data.items():

    cnt=(value.groupby('Type')['Packets'].sum())
    print(cnt)

    df.append(cnt,ignore_index=True)

最佳答案

另一种建议的方式是使用分组,转置和行堆栈到数据帧。

import pandas as pd
import numpy as np

df_1 = pd.DataFrame({'col1':['A', 'B', 'A', 'A', 'B'], 'col2':[10, 20, 20, 10, 10]})
df_2 = pd.DataFrame({'col1':['A', 'B', 'A', 'A', 'B'], 'col2':[30, 10, 15, 5, 25]})
df_1_agg = df_1.groupby(['col1']).agg({'col2':'sum'}).T.values
df_2_agg = df_2.groupby(['col1']).agg({'col2':'sum'}).T.values
pd.DataFrame(np.row_stack((df_1_agg, df_2_agg)), index = ['file1', 'file2']).rename(columns = {0:'A', 1:'B'})


python -  Pandas groupby并求和到其他数据框-LMLPHP

编辑:概括起来,您需要将其放入函数并循环。另外,在一般情况下,需要格式化索引(文件{i})。

lst_df = [df_1, df_2]

df_all = []

for i in lst_df:
    # iterate every data faame
    df_agg = i.groupby(['col1']).agg({'col2':'sum'}).T.values

    # append to the accumulator
    df_all.append(df_agg)

pd.DataFrame(np.row_stack(df_all), index = ['file1', 'file2']).rename(columns = {0:'A', 1:'B'})

10-01 07:15
查看更多