我有以下示例数据框,并希望合并它们以获得结果。我尝试了外部联接,但结果不是我想要的。
df1 = pd.DataFrame(
{
"I": ["I1","I2", "I3", "I4"],
"A": ["A0", "A1", "A2", "A3"],
"B": ["B0", "B1", "B2", "B3"],
"C": ["C0", "C1", "C2", "C3"],
"D": ["D0", "D1", "D2", "D3"],
},
)
df2 = pd.DataFrame(
{
"I":["I1","I4", "I5", "I6", "I7"],
"E": ["A5", "A6", "A7","A8","A9"],
"F": ["B5", "B6", "B7","B8","B9"],
"G": ["C5", "C6", "C7","C8","C9"],
"H": ["D5", "D6", "D7","D8","D9"],
},
)
result= pd.DataFrame(
{
"I": ["I1", "I2", "I3", "I4", "I5", "I6", "I7"],
"A": ["A0", "A1", "A2", "A3", "00", "00", "00"],
"B": ["B0", "B1", "B2", "B3", "00", "00", "00"],
"C": ["C0", "C1", "C2", "C3", "00", "00", "00"],
"D": ["D0", "D1", "D2", "D3", "00", "00", "00"],
"E": ["A5", "00", "00", "A6", "A7", "A8", "A9"],
"F": ["B5", "00", "00", "B6", "B7", "B8", "B9"],
"G": ["C5", "00", "00", "C6", "C7", "C8", "C9"],
"H": ["D5", "00", "00", "D6", "D7", "D8", "D9"],
},
)
df1.set_index('I')
df2.set_index('I')
df_merg=pd.concat([df1,df2],join='outer').fillna(0)
print('Result of merge:')
print(df_merg)
print('Expected result')
print(result)
运行以上代码将生成:
Result of merge:
I A B C D E F G H
0 I1 A0 B0 C0 D0 0 0 0 0
1 I2 A1 B1 C1 D1 0 0 0 0
2 I3 A2 B2 C2 D2 0 0 0 0
3 I4 A3 B3 C3 D3 0 0 0 0
0 I1 0 0 0 0 A5 B5 C5 D5
1 I4 0 0 0 0 A6 B6 C6 D6
2 I5 0 0 0 0 A7 B7 C7 D7
3 I6 0 0 0 0 A8 B8 C8 D8
4 I7 0 0 0 0 A9 B9 C9 D9
Expected result
I A B C D E F G H
0 I1 A0 B0 C0 D0 A5 B5 C5 D5
1 I2 A1 B1 C1 D1 00 00 00 00
2 I3 A2 B2 C2 D2 00 00 00 00
3 I4 A3 B3 C3 D3 A6 B6 C6 D6
4 I5 00 00 00 00 A7 B7 C7 D7
5 I6 00 00 00 00 A8 B8 C8 D8
6 I7 00 00 00 00 A9 B9 C9 D9
如图所示,合并数据具有索引为I1(和I4)的两行,但是我想要的是使I1的合并数据仅为一行,但是来自两个 Dataframe 的数据彼此相邻。
如何实现问题中所示的合并数据框?
2条答案
按热度按时间hs1ihplo1#
外部是正确的,您可以在
merge
中使用它:5tmbdcev2#
使用
how='left'
作为pd.merge
的参数: