Pandas Groupby使用来自其他数据框的信息

时间:2019-09-19 18:34:37

标签: python python-3.x pandas merge pandas-groupby

我有以下两个数据框:

表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的行。

1 个答案:

答案 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