【问题标题】:Pandas Groupby using information from other dataframePandas Groupby 使用来自其他数据框的信息
【发布时间】:2020-01-20 20:22:30
【问题描述】:

我有以下两个数据框:

表 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 有重复项。 我对 pandas 很陌生,但据我了解 groupby 的概念,这应该是完美的工具。 我希望我能很好地解释我的问题。

编辑: 关于 cmets,我想拆分问题。

第一步: 合并表 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

Step2:根据值 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

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

【问题讨论】:

  • “我希望我能很好地解释我的问题。” 不,不,你没有——至少对我来说是这样。前面的段落真的不清楚,难以阅读。您可能应该将此过程拆分为多个较小的步骤来理解,因为现在您似乎想在一个步骤中进行合并、聚合和过滤。
  • 感谢您的提示。我试图将这个过程分成更小的步骤。我希望它有所帮助。

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


【解决方案1】:

尝试合并两次:

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  

【讨论】:

  • 我尝试了您的解决方案,但在您构建平均值的第一步中,您不尊重 Property1=Value1 +-1 的条件。我也把我的问题描述得太复杂了。我编辑了这个问题,希望现在更清楚我想要实现的目标。
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 2023-04-08
  • 2019-04-15
  • 1970-01-01
  • 2014-11-29
  • 2019-04-06
  • 2019-08-10
  • 1970-01-01
相关资源
最近更新 更多