我已经看到很多SUMIFS问题在这里得到回答,但与我需要的问题有很大的不同。
第一个交易数据框包含交易ID和C_ID
transaction C_ID
1 101
2 103
3 104
4 101
5 102
6 104
第二个客户数据框包含C_ID,开/关,金额
C_ID On/Off Amount
102 On 320
101 On 400
101 On 200
103 On 60
104 Off 80
104 On 100
所以我想基于C_ID并以“客户”数据框中的“开/关”列为条件来计算金额。产生的交易数据框应为
transaction C_ID Amount
1 101 600
2 103 60
3 104 100
4 101 600
5 102 320
6 104 100
这是EXCEL中有关金额计算方式的公式
= SUMIFS(Customer.Amount,Customer.C_ID = Trade.C_ID,Customer.On / Off = On)
所以我想使用Pandas在Python中复制此特定公式
答案 0 :(得分:1)
您可以对过滤的数据使用groupby()
来计算总和,并可以使用map
将新列分配给交易数据。
s = df2[df2['On/Off']=='On'].groupby('C_ID')['Amount'].sum()
df1['Amount'] = df1['C_ID'].map(s)
答案 1 :(得分:0)
我们过滤reindex
+ df1['Amount']=df2.loc[df2['On/Off']=='On'].groupby(['C_ID']).Amount.sum().reindex(df1.C_ID).tolist()
df1
Out[340]:
transaction C_ID Amount
0 1 101 600
1 2 103 60
2 3 104 100
3 4 101 600
4 5 102 320
5 6 104 100
分配
123.4567
123,4567
123 4567