python - 根据 Pandas 中的两个第一列合并具有不同行数的列
问题描述
我有两个不同的文件,它们包含相同数量但长度不同的列,即
文件1.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
文件2.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'])
如何解决这个问题呢?
解决方案
用于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)
推荐阅读
- elasticsearch - 将分片和副本分配给特定节点
- r - 对具有数千行和列的数据框的列进行排序
- javascript - 如何在同一路由中的 Express 中添加多个可选参数
- javascript - 如何将所有函数存储在一个文件中并在 ReactJS 中继承
- user-interface - 将我的代码从谷物更改为空气质量
- reactjs - 当api给出403状态时如何刷新和更新存储在redux store中的刷新令牌
- parameter-passing - 将带有今天日期的特定时间作为值传递到 Informatica Cloud 中的输入字段
- extjs - 布尔数据和网格列列表过滤器以及 Ext.Data.Store 的 ExtJS 问题
- c++ - c ++重复if条件差异与括号
- angular - 不必要的 Firebase 使用 apikey 添加 auth Iframe