[英]Pandas sum two dataframes based on the value of column
我有兩個數據框,我想有條件地沿y
軸求和。
例如:
df_1
a b value 1 1 1011 1 2 1012 2 1 1021 2 2 1022
df_2
a b value 9 9 99 1 2 12 2 1 21
我想制作df_1['value'] -= df_2['value'] if df_1[a] == df_2[a] & df_1[b] == df_2[b]
,所以 output 將是:
OUTPUT
a b value 1 1 1011 1 2 1000 2 1 1000 2 2 1022
有沒有辦法實現這一點,而不是迭代整個dataframe ? (挺大的)
利用pandas
在此處提供的索引 alignment,在減去之前將a
和b
設置為索引。
for df in [df1, df2]:
df.set_index(['a', 'b'], inplace=True)
df1.sub(df2, fill_value=0).reindex(df1.index)
value
a b
1 1 1011.0
2 1000.0
2 1 1000.0
2 1022.0
你可以讓
merged = pd.merge(df_1, df_2, on=['a', 'b'], left_index=True)
df_1.value[merged.index] = merged.value_x - merged.value_y
結果:
In [37]: df_1
Out[37]:
a b value
0 1 1 1011
1 1 2 1000
2 2 1 1000
3 2 2 1022
您還可以執行左連接並減去匹配值。 以下是如何做到這一點:
(pd.merge(df_1, df_2, how='left', on=['a', 'b'], suffixes=('_1', '_2'))
.fillna(0)
.assign(value=lambda x: x.value_1 - x.value_2)
)[['a', 'b', 'value']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.