熊猫Groupby,求和和展平数据框

时间:2020-07-24 03:50:43

标签: python pandas pandas-groupby

我有一个数据框,我想groupby几个条件,然后求和几个字段。当我对值求和时,我想将值展平

输入以下内容:

UserID    Site    First Name    Last Name    May Hours    June Hours     July Hours
6385         A          John          Doe            8             9             10
6385         A          John          Doe            3             7              8
4756         A          Mark         Mean            7             6              5
4756         B          Mark         Mean            3             2              3

并按UserIDSite分组,我想要的输出是:

UserID    Site    First Name    Last Name    May Hours    June Hours     July Hours
6385         A          John          Doe           11            16             18
4756         A          Mark         Mean            7             6              5
4756         B          Mark         Mean            3             2              3

可以假定除了UserID,网站和“每月小时数”之外,所有其他列的值都相同。

我目前的想法是:

for group_name, group_df in df.groupby(by=['UserID','Site']):
    if len(group_df) > 1: # We have rows that need to be summed
        sums = group_df[['May Hours','June Hours','July Hours']].sum()
        # Assign this sum to the first row in the grouped_df
        # Remove all following rows in grouped_df (we already got their sum)
        # Append this to a new dataframe
    else:
        # Append this to a new dataframe

虽然此解决方案可能有效,但肯定效率不高,但我不确定展平数据框的最佳方法

1 个答案:

答案 0 :(得分:1)

遇到这种情况时,我经常会先旋转和展平数据框。几个关键原因是它将内容保留在数据框中,并允许我使用索引来处理诸如连接之类的内容。不过,没有什么反对groupby,只喜欢pivot_table

df = pd.pivot_table(
    index=df.columns[:4],
    values=df.columns[4:],
    aggfunc=np.sum
)

df = pd.DataFrame(df.to_records())