【问题标题】:Python: combine two data frames with all combinations of indexPython:将两个数据框与索引的所有组合结合起来
【发布时间】:2019-10-22 08:49:53
【问题描述】:

我有一个数据框,其中包含 x 个变量和一个 id_number 1:n(n 很大)。我想创建一个新的数据框,根据数据框中的 id_number 水平合并每一对。 原始数据如下所示:

id_number   var_x1   var_x2   
1           sth      stuff   
2           other    things  
3           more     info  

我想为每一对可能的配对获得这个:

id_numberA  var_x1A var_x2A id_numberB var_x1B var_x2B
1           sth     stuff   1          sth     stuff
1           sth     stuff   2          other   things
1           sth     stuff   3          more    info
2           other   things  3          more    info

对于大型数据集,最有效的方法是什么?

【问题讨论】:

  • 为什么在请求的输出中有id = 1与自身的组合,但没有id = 2 (or 3)与自身的组合?
  • 因为id=1和id=2的组合已经在第二行完成了,所以不需要再次组合id=2和id=1。
  • 我问为什么在请求输出的第一行中将id = 1id = 1 组合在一起,但您没有将id = 2id = 2 组合在一起。无论如何,在我答案的最后一行代码中,它过滤了现有的组合。

标签: python dataframe merge melt


【解决方案1】:

您可以使用以下方法创建合并索引:

df['temp'] = 1

然后将dataframe 与自身合并:

merged_df = df.merge(df, on='temp', suffixes=('A', 'B')).drop('temp', axis=1)

如果你不想要相同的id_number 的组合,最后做:

merged_df = merged_df[merged_df['id_numberA'] != merged_df['id_numberB']]

如果您不想重复混合 id_numberAid_numberB,请改用 finally:

merged_df = merged_df[merged_df['id_numberA'] < merged_df['id_numberB']]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2021-11-27
    • 2021-09-28
    相关资源
    最近更新 更多