R语言:跨不同长度数据框按多条件对ID求和
解决不同长度数据框按条件求和的问题
嘿,很高兴帮你解决这个问题!看起来你需要把两个不同结构的数据框关联起来,按「颜色为蓝色且类型为2」的条件计算对应ID的价格总和,没符合条件的就返回0对吧?我用Python的pandas来给你一步步实现:
步骤1:模拟输入数据框
首先我们先把你给出的示例数据转换成pandas数据框:
import pandas as pd # 第一个ID映射数据框 df_id = pd.DataFrame({ 'ID': [1, 2, 3], 'Code': ['A', 'B', 'C'] }) # 第二个详细数据框 df_details = pd.DataFrame({ 'ID': ['A', 'A', 'B', 'B', 'C', 'C'], 'Color': ['Green', 'Blue', 'Green', 'Blue', 'Green', 'Blue'], 'Type': [1, 2, 3, 2, 2, 4], 'Price': [5, 6, 7, 2, 4, 5] })
步骤2:筛选符合条件的行
先从详细数据框里挑出满足「Color=Blue且Type=2」的记录:
filtered_details = df_details[(df_details['Color'] == 'Blue') & (df_details['Type'] == 2)]
步骤3:按Code分组求和价格
对筛选后的结果按ID(也就是对应第一个数据框的Code)分组,计算价格总和:
summed_prices = filtered_details.groupby('ID')['Price'].sum().reset_index(name='Total_Price')
步骤4:关联两个数据框并填充缺失值
把求和结果和第一个ID映射数据框做左连接,这样能保留所有原始ID,没有匹配到的就用0填充价格:
final_result = df_id.merge(summed_prices, left_on='Code', right_on='ID', how='left') # 整理列名并填充缺失值 final_result = final_result.rename(columns={'ID_x': 'ID', 'Code': 'Associated_ID'}).drop(columns='ID_y') final_result['Total_Price'] = final_result['Total_Price'].fillna(0)
最终结果
运行完上面的代码后,final_result就是你想要的输出:
ID Associated_ID Total_Price 0 1 A 6.0 1 2 B 2.0 2 3 C 0.0
如果你的实际数据有特殊格式(比如ID列名不同、数据类型不一致),可以调整代码里的列名或者先做数据类型转换。要是还有其他需求,也可以补充说明哦!
内容的提问来源于stack exchange,提问作者BFretti
相关产品推荐
相关产品推荐

