我有以下两个数据框:
表1:
Key1 Key2 Value1 Other Data
1 2 5 foo
3 1 6 bar
和
表2:
Key1 Key2 Property1 Property2
1 2 5 7
3 1 6 8
1 3 7 7
2 1 4 4
2 1 6 6
2 1 8 5
在表1中,键的顺序无关紧要。表1没有重复项。 在表2中,键的顺序很重要。表2有重复项。 我对熊猫还很陌生,但是据我了解,groupby的概念应该是完美的工具。 我希望我能很好地解释我的问题。
编辑: 关于评论,我想解决这个问题。
第一步: 合并表1和表2。我认为这必须是层级的。
Key 1 Key 2 Value 1 Other Data Key1 Key2 Property1 Propterty2
1 2 5 foo 1 2 5 7
2 1 4 4
2 1 6 6
2 1 8 5
3 1 6 bar 3 1 6 8
1 3 7 7
第2步:根据值1过滤值。如果属性1 =值1 + -1 ,请保留该条目,否则请删除该条目。在此处的示例中,结果为:
Key 1 Key 2 Value 1 Other Data Key1 Key2 Property1 Propterty2
1 2 5 foo 1 2 5 7
2 1 4 4
2 1 6 6
3 1 6 bar 3 1 6 8
1 3 7 7
Step3:重塑和构建均值: 建立剩余所有对的均值(此处为(2,1)的两个条目的均值)。然后重塑数据框。
Key 1 Key 2 Value 1 Other Data Property1(i,j) Propterty2(i,j) Property1(j,i) Propterty2(j,i)
1 2 5 foo 5 7 5 5
3 1 6 bar 6 8 7 7
第4步:处理丢失的数据。如果我仅拥有表2中(1,3)的数据,而没有(3,1)的数据,那么他应该在步骤3中用NaN填充此值。在最后一步中,我想删除所有带有NaN的行。
答案 0 :(得分:0)
尝试合并两次:
new_df = df2.groupby(['Key1','Key2'], as_index=False).mean()
(df1.merge(new_df,
left_on=['Key1','Key2'],
right_on=['Key2','Key1'],
suffixes=('', '_add'))
.drop(['Key1_add','Key2_add'], axis=1)
.merge(new_df, on=['Key1','Key2'],
suffixes=['(i,j)','(j,i)'] )
)
输出:
Key1 Key2 Value1 OtherData Property1(i,j) Property2(i,j) \
0 1 2 5 foo 5.5 5.0
1 3 1 6 bar 7.0 7.0
Property1(j,i) Property2(j,i)
0 5.0 7.0
1 6.0 8.0