簡體   English   中英

Pandas 根據列的值對兩個數據幀求和

[英]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,在減去之前將ab設置為索引。


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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM