我有一个带有两个月值列的数据框,分别为“ 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/