簡體   English   中英

合並熊貓中的兩個數據集

[英]Merge two datasets in Pandas

我以前曾與Stata合作,現在正嘗試使用Python完成同樣的工作。 但是,我對合並命令有麻煩。 我一定不知所措。 我要合並的兩個數據框如下所示:

 df1:
 Date id Market_Cap
 2000 1  400
 2000 2  200
 2001 1  410
 2001 2  220

 df2:
 id Ticker
 1   Shell
 2   ExxonMobil

我現在的目標是獲取以下數據集:

Date id Market_Cap  Ticker
2000 1  400        Shell 
2000 2  200        ExxonMobil 
2001 1  410        Shell 
2001 2  220        ExxonMobil

我嘗試了以下命令:

merged= pd.merge(df1, df2, how="left", on="id")

這將合並數據集,但在“股票行情”列中僅給出nan。 我查看了幾個消息源,也許我弄錯了,但是“左”命令對我而言不是正確的做法嗎? 我也嘗試過“正確”和“外部”。 他們沒有得到我想要的結果,並且“內部”似乎在這里通常不起作用。

我是否缺少一些重要的東西?

這是一個問題,您在一個df中的列idobject (顯然是string ),另一個是int ,因此沒有匹配項並得到NaN

如果具有相同的dtypes

print (df1['id'].dtypes)
int64
print (df2['id'].dtypes)
int64

merged = pd.merge(df1, df2, how="left", on="id")
print (merged)
   Date  id  Market_Cap      Ticker
0  2000   1         400       Shell
1  2000   2         200  ExxonMobil
2  2001   1         410       Shell
3  2001   2         220  ExxonMobil

如果只需要添加一個新列的另一種解決方案是map

df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
   Date  id  Market_Cap      Ticker
0  2000   1         400       Shell
1  2000   2         200  ExxonMobil
2  2001   1         410       Shell
3  2001   2         220  ExxonMobil

模擬您的問題:

print (df1['id'].dtypes)
object
print (df2['id'].dtypes)
int64

df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
   Date id  Market_Cap Ticker
0  2000  1         400    NaN
1  2000  2         200    NaN
2  2001  1         410    NaN
3  2001  2         220    NaN

而解決辦法是轉換為intastype (或列iddf2str ):

df1['id'] = df1['id'].astype(int)
#alternatively
#df2['id'] = df2['id'].astype(str)
df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
   Date  id  Market_Cap      Ticker
0  2000   1         400       Shell
1  2000   2         200  ExxonMobil
2  2001   1         410       Shell
3  2001   2         220  ExxonMobil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM