pandas 合并和反转两个 Dataframe 的行[重复]

wi3ka0sx  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(137)
    • 此问题在此处已有答案**:

Pandas - Interleave / Zip two DataFrames by row(5个答案)
昨天关门了。
这篇文章是昨天编辑并提交审查的。
假设我们有:

>>> df1
   A  B
0  1  a
1  2  a
2  3  a
3  4  a

>>> df2
   A  B
0  1  b
1  2  b
2  3  b
3  5  b

我想将它们合并在"A"上,然后通过交错行列出它们,如下所示:

A  B
0  1  a
0  1  b
1  2  a
1  2  b
2  3  a
2  3  b

我试过合并,但是它一列一列地列出它们。例如,如果我有3个或更多的 Dataframe ,合并可以在一些列上合并它们,但是我的问题是要交错它们

50few1ms

50few1ms1#

如果需要按A匹配boolean indexing中按Series.isin筛选的行,则使用DataFrame.sort_index传递到concat

df = pd.concat([df1[df1.A.isin(df2.A)], 
                 df2[df2.A.isin(df1.A)]]).sort_index(kind='stable')
print (df)
   A  B
0  1  a
0  1  b
1  2  a
1  2  b
2  3  a
2  3  b

编辑:
对于一般数据,可以按A排序,并创建默认索引以正确交错:

df = (pd.concat([df1[df1.A.isin(df2.A)].sort_values('A', kind='stable').reset_index(drop=True), 
                 df2[df2.A.isin(df1.A)].sort_values('A', kind='stable').reset_index(drop=True)])
        .sort_index(kind='stable'))

相关问题