基于相同Name与Date匹配的两个pandas DataFrame数值相减实现
解决方案
实现逻辑如下:
- 先对第一个DataFrame按
Name和date两个字段分组,对同组的price字段求和 - 将汇总结果和第二个DataFrame按
Name、date字段匹配,计算第二个DataFrame的price减去汇总后的price得到差值 - 将匹配后得到的差值行追加到原始第一个DataFrame中,即可得到预期结果
示例代码如下:
import pandas as pd # 构造示例df1、df2,实际使用时替换为你自己的数据源即可 df1 = pd.DataFrame({ 'Name': ['Apple','Orange','Banana','Gauva','Grapes','Sapota','Papaya', 'Apple','Orange','Banana','Gauva','Grapes','Apple','Orange', 'Banana','Gauva','Grapes'], 'price': [25,35,15,10,5,15,33,20,30,10,10,5,15,25,25,20,15], 'date': ['23-9-2021']*5 + ['22-9-2021','21-9-2021'] + ['23-9-2021']*10 }) df2 = pd.DataFrame({ 'Name': ['Apple','Orange','Banana','Gauva','Grapes'], 'price': [80,100,90,60,45], 'date': ['23-9-2021']*5 }) # 第一步:df1按Name、date分组求和 df1_sum = df1.groupby(['Name','date'], as_index=False)['price'].sum() # 第二步:和df2合并计算差值 merged = pd.merge(df1_sum, df2, on=['Name','date'], suffixes=('_sum','_df2')) merged['price'] = merged['price_df2'] - merged['price_sum'] # 只保留需要的列,准备追加 diff_rows = merged[['Name','price','date']] # 第三步:追加到df1 df1 = pd.concat([df1, diff_rows], ignore_index=True) # 输出结果 print(df1)
以上代码支持任意数量的水果名称,不需要手动指定枚举值,直接运行即可。
内容的提问来源于stack exchange,提问作者Krishna Prasad
相关产品推荐
相关产品推荐

