我想pandas dataframes基于公共date變數合并兩個。下面是我的代碼
import pandas as pd
data = pd.DataFrame({'date' : pd.to_datetime(['2010-12-31', '2012-12-31']), 'val' : [1,2]})
datarange = pd.DataFrame(pd.period_range('2009-12-31', '2012-12-31', freq='A'), columns = ['date'])
pd.merge(datarange, data, how = 'left', on = 'date')
有了這個我得到以下結果
date val
0 2009 NaN
1 2010 NaN
2 2011 NaN
3 2012 NaN
您能否幫助我如何正確合并這兩個dataframes?
uj5u.com熱心網友回復:
用于right_on相同的年度期間,如datarange['date']列中:
df = pd.merge(datarange,
data,
how = 'left',
left_on = 'date',
right_on=data['date'].dt.to_period('A'))
print (df)
date date_x date_y val
0 2009 2009 NaT NaN
1 2010 2010 2010-12-31 1.0
2 2011 2011 NaT NaN
3 2012 2012 2012-12-31 2.0
或創建幫助列:
df = pd.merge(datarange,
data.assign(datetimes=data['date'], date=data['date'].dt.to_period('A')),
how = 'left',
on = 'date')
print (df)
date val datetimes
0 2009 NaN NaT
1 2010 1.0 2010-12-31
2 2011 NaN NaT
3 2012 2.0 2012-12-31
uj5u.com熱心網友回復:
您需要合并一個通用型別。
例如,您可以將年份設定為每一側的合并鍵:
pd.merge(datarange, data, how='left',
left_on=datarange['date'].dt.year,
right_on=data['date'].dt.year
)
輸出:
key_0 date_x date_y val
0 2009 2009 NaT NaN
1 2010 2010 2010-12-31 1.0
2 2011 2011 NaT NaN
3 2012 2012 2012-12-31 2.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/479580.html
標籤:python-3.x 熊猫 约会时间
