通过使用来自其他数据帧的信息进行分组

2024-09-30 22:10:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下两个数据帧:

表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

第三步:重塑和构建意味着: 建立所有剩余对的平均值(这里是(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

第四步:处理丢失的数据。如果我在表2中只有(1,3)的数据,而没有(3,1)的数据,那么他应该在步骤3中用NaN填充这个值。在最后一步中,我想删除所有带有NaN的行


Tags: 数据keydatafoo顺序valuebar步骤
1条回答
网友
1楼 · 发布于 2024-09-30 22:10:04

尝试合并两次:

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  

相关问题 更多 >