【问题标题】:Merge columns with different number of rows based on two first columns in Pandas根据 Pandas 中的两个第一列合并具有不同行数的列
【发布时间】:2021-12-27 08:21:03
【问题描述】:

我有两个不同的文件,它们包含相同数量但长度不同的列,即

file1.txt

1650,A,1,1,1
1650,A,1,1,1
1650,A,1,1,1
1650,B,2,2,2
1650,B,2,2,2
1650,B,2,2,2
1650,B,2,2,2
1650,B,2,2,2

file2.txt

1650,A,3,3,3
1650,A,3,3,3
1650,A,3,3,3
1650,A,3,3,3
1650,A,3,3,3
1650,B,4,4,4
1650,B,4,4,4

我想使用 pandas 将它们连接起来,结果如下:

1650,A,1,1,1,3,3,3
1650,A,1,1,1,3,3,3
1650,A,1,1,1,3,3,3
1650,A,NaN,NaN,NaN,3,3,3
1650,A,NaN,NaN,NaN,3,3,3
1650,B,2,2,2,4,4,4
1650,B,2,2,2,4,4,4
1650,B,2,2,2,NaN,NaN,NaN
1650,B,2,2,2,NaN,NaN,NaN
1650,B,2,2,2,NaN,NaN,NaN

我使用以下代码,但似乎无法正常工作:

df1 = read_data('file1')
df2 = read_data('file2')
result = pd.merge_ordered(df1,df2, how='outer', on=['a', 'b'])

如何解决这个问题?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用GroupBy.cumcount 作为计数器,因此可以通过merge 与添加列group 合并:

    df1['group'] = df1.groupby(['a', 'b']).cumcount()
    df2['group'] = df2.groupby(['a', 'b']).cumcount()
    result = pd.merge(df1,df2, how='outer', on=['a', 'b', 'group']).drop('group', axis=1)
    

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      相关资源
      最近更新 更多