如何重新索引两个 pandas 数据框中的列,以便它们都具有相同的列?
How to reindex columns in two pandas dataframes so that they both have the same columns?
我有两个数据框
df1
>>>
a b
0 1 4
1 2 5
2 3 6
df2
>>>
a c
0 9 8
1 0 1
2 0 0
我想做的是在每个数据框中创建非重叠列并用零填充它们。因此,因为 df1
不包含 df2
中的列 c
,并且 df2
不包含 df1
中的列 b
,最终结果将是是
df1
>>>
a b c
0 1 4 0
1 2 5 0
2 3 6 0
df2
>>>
a c b
0 9 8 0
1 0 1 0
2 0 0 0
实现此目标的最佳方法是什么?
我试过使用 reindex
和 reindex_like
,但前者似乎只重新索引行而不是列,我不知道使用什么参数来重新索引列
df1.reindex(df2.columns, fill_value=0.)
>>>
a b
a 0.0 0.0
c 0.0 0.0
df1, df2 = df1.align(df2, fill_value=0)
print (df1)
print (df2)
a b c
0 1 4 0
1 2 5 0
2 3 6 0
a b c
0 9 0 8
1 0 0 1
2 0 0 0
您的解决方案 Index.union
and DataFrame.reindex
,列 axis=1
:
c = df1.columns.union(df2.columns)
df1, df2 = df1.reindex(c, fill_value=0, axis=1), df2.reindex(c, fill_value=0, axis=1)
print (df1)
print (df2)
a b c
0 1 4 0
1 2 5 0
2 3 6 0
a b c
0 9 0 8
1 0 0 1
2 0 0 0
我有两个数据框
df1
>>>
a b
0 1 4
1 2 5
2 3 6
df2
>>>
a c
0 9 8
1 0 1
2 0 0
我想做的是在每个数据框中创建非重叠列并用零填充它们。因此,因为 df1
不包含 df2
中的列 c
,并且 df2
不包含 df1
中的列 b
,最终结果将是是
df1
>>>
a b c
0 1 4 0
1 2 5 0
2 3 6 0
df2
>>>
a c b
0 9 8 0
1 0 1 0
2 0 0 0
实现此目标的最佳方法是什么?
我试过使用 reindex
和 reindex_like
,但前者似乎只重新索引行而不是列,我不知道使用什么参数来重新索引列
df1.reindex(df2.columns, fill_value=0.)
>>>
a b
a 0.0 0.0
c 0.0 0.0
df1, df2 = df1.align(df2, fill_value=0)
print (df1)
print (df2)
a b c
0 1 4 0
1 2 5 0
2 3 6 0
a b c
0 9 0 8
1 0 0 1
2 0 0 0
您的解决方案 Index.union
and DataFrame.reindex
,列 axis=1
:
c = df1.columns.union(df2.columns)
df1, df2 = df1.reindex(c, fill_value=0, axis=1), df2.reindex(c, fill_value=0, axis=1)
print (df1)
print (df2)
a b c
0 1 4 0
1 2 5 0
2 3 6 0
a b c
0 9 0 8
1 0 0 1
2 0 0 0