如何将左DataFrame单行数据按匹配Key拆分至右DataFrame多行?
解决方案
你需要实现的是将左表中每个Key对应的Data值,平均分配到右表该Key的所有行中(每行取值为Data / 该Key在右表的行数),用Pandas可以这样做:
步骤说明
- 先将右表与左表按
Key做左连接,让右表每行都带上对应Key的Data值 - 按
Key分组,将每组的Data值替换为Data总量 / 组内行数
代码示例
import pandas as pd # 创建示例数据 left_df = pd.DataFrame({'Key': ['A', 'B'], 'Data': [4, 1]}) right_df = pd.DataFrame( {'Key': ['A', 'A', 'A', 'B', 'A'], 'Other Data': ['Monday', 'Tuesday', 'Wednesday', 'Monday', 'Thursday']} ) # 合并左右表,保留右表所有行并匹配对应Key的Data merged_df = pd.merge(right_df, left_df, on='Key', how='left') # 按Key分组,计算每行应分配的Data值 merged_df['Data'] = merged_df.groupby('Key')['Data'].transform( lambda group: group.iloc[0] / len(group) ) print(merged_df)
输出结果
Key Other Data Data 0 A Monday 1.0 1 A Tuesday 1.0 2 A Wednesday 1.0 3 B Monday 1.0 4 A Thursday 1.0
如果需要将Data列转为整数类型,只需添加一行:
merged_df['Data'] = merged_df['Data'].astype(int)
内容的提问来源于stack exchange,提问作者Dalv32
相关产品推荐
相关产品推荐

