如何加入/合并兩個具有部分重疊索引的 Pandas DataFrame,我希望生成的加入的 DataFrame 保留第一個 DataFrame 中的列值,即洗掉重復項df2?
import pandas as pd
import io
df1 = """
date; count
'2020-01-01'; 210
'2020-01-02'; 189
'2020-01-03'; 612
'2020-01-04'; 492
'2020-01-05'; 185
'2020-01-06'; 492
'2020-01-07'; 155
'2020-01-08'; 62
'2020-01-09'; 15
"""
df2 = """
date; count
'2020-01-04'; 21
'2020-01-05'; 516
'2020-01-06'; 121
'2020-01-07'; 116
'2020-01-08'; 82
'2020-01-09'; 121
'2020-01-10'; 116
'2020-01-11'; 82
'2020-01-12'; 116
'2020-01-13'; 82
"""
df1 = pd.read_csv(io.StringIO(df1), sep=";")
df2 = pd.read_csv(io.StringIO(df2), sep=";")
print(df1)
print(df2)
我試過使用
df1.reset_index().merge(df2, how='outer').set_index('date')
但是,這會洗掉連接的 df2 值。有沒有辦法保留第一個資料幀的重復行?
期望的結果:
print(df3)
date count
'2020-01-01' 210
'2020-01-02' 189
'2020-01-03' 612
'2020-01-04' 492
'2020-01-05' 185
'2020-01-06' 492
'2020-01-07' 155
'2020-01-08' 62
'2020-01-09' 15
'2020-01-10' 116
'2020-01-11' 82
'2020-01-12' 116
'2020-01-13' 82
非常感謝任何幫助,謝謝。
uj5u.com熱心網友回復:
使用 combine_first:
df3 = (df1.set_index('date')
.combine_first(df2.set_index('date'))
.reset_index()
)
輸出:
date count
0 '2020-01-01' 210
1 '2020-01-02' 189
2 '2020-01-03' 612
3 '2020-01-04' 492
4 '2020-01-05' 185
5 '2020-01-06' 492
6 '2020-01-07' 155
7 '2020-01-08' 62
8 '2020-01-09' 15
9 '2020-01-10' 116
10 '2020-01-11' 82
11 '2020-01-12' 116
12 '2020-01-13' 82
uj5u.com熱心網友回復:
這是使用concatand 的另一種方法drop_duplicates:
df3=pd.concat([df1, df2]).drop_duplicates(["date"], keep="first", ignore_index=True)
輸出:
date count
0 '2020-01-01' 210
1 '2020-01-02' 189
2 '2020-01-03' 612
3 '2020-01-04' 492
4 '2020-01-05' 185
5 '2020-01-06' 492
6 '2020-01-07' 155
7 '2020-01-08' 62
8 '2020-01-09' 15
9 '2020-01-10' 116
10 '2020-01-11' 82
11 '2020-01-12' 116
12 '2020-01-13' 82
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357498.html
下一篇:獲取熊貓中兩列之間的鏈接
