首页 > 解决方案 > Python Pandas中DataFrame中的值聚合?

问题描述

我有如下合同的 DataFrame:

df = pd.DataFrame ({"ID" : ["1", "2", "1", "2"], 
                    "currency" : ["USD", "USD", "EUR", "CHF"],
                     "amount" : [100, 200, 400, 500]})

我需要计算:

  1. (col1) 欧元货币合约数量
  2. (col2) 使用欧元以外货币的合约数量
  3. (col3) 4 欧元合约金额/ (col4) 欧元以外货币合约金额

为了更精确,我需要如下所示的 DataFrame: 在此处输入图像描述

标签: pythonpandasdataframe

解决方案


用于带有聚合DataFrame.assign的新列(lambda 用于处理 in 之前计数的新列) :assignsum

cols = ['col1','col2','col3','col4']
df = (df.assign(col1 = df.currency == 'EUR',
                col2 = df.currency != 'EUR',
                col3 = lambda x: df.amount.mask(x.col2, 0),
                col4 = lambda x: df.amount.mask(x.col1, 0))
        .groupby(df['ID'])[cols]
        .sum()
        .reset_index())
print (df)
  ID  col1  col2  col3  col4
0  1     1     1   400   100
1  2     0     2     0   700

推荐阅读