我有一个带有两个月值列的数据框,分别为“ month1”和“ month2”。如果“ month1”列中的值不是“ NA”,则按照“ month1”列中的相应“金额”值求和。如果“ month1”列中的值为“ NA”,则将“ month2”列中相应的“金额”值相加。

import pandas as pd
df = pd.DataFrame({'month1': [1,2,'NA', 1, 4, 'NA', 'NA'],
          'month2': ['NA',5,1, 2, 'NA', 1, 3],
          'amount': [10,20,40, 50, 60, 70, 100]})


输入和输出数据帧如下:

输入数据框

   month1  month2  amount
0     1.0     NaN      10
1     2.0     5.0      20
2     NaN     1.0      40
3     1.0     2.0      50
4     4.0     NaN      60
5     NaN     1.0      70
6     NaN     3.0     100


输出数据帧

最佳答案

由于您的NA值是字符串,因此您可以在两列中简单地groupby

# ignore month2 if month1 is NA
df.loc[df.month1.ne('NA'), 'month2'] = 'NA'

# groupby and sum
df.groupby(['month1','month2']).amount.transform('sum')


如果您不想更改数据,则可以

s = np.where(df.month1.ne('NA'), 'NA', df['month2'])

df.groupby(['month1', s]).amount.transform('sum')


输出:

0     60
1     20
2    110
3     60
4     60
5    110
6    100
Name: amount, dtype: int64

关于python - 应用条件分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57513978/

10-12 21:13