亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

結合不同周期頻率的 Pandas 數據幀

結合不同周期頻率的 Pandas 數據幀

HUX布斯 2022-06-02 17:26:10
假設我有以下兩個數據框:np.random.seed(1)annual = pd.DataFrame(data=np.random.random((2, 4)), index=index, columns=pd.period_range(start="2015", end="2018", freq="Y"))quarterly = pd.DataFrame(data=np.random.random((2,3)), index=index, columns=pd.period_range('2019', freq='Q', periods=3))Annual:    2015        2016        2017        2018A   0.417022    0.720324    0.000114    0.302333B   0.146756    0.092339    0.186260    0.345561Quarterly:    2019Q1      2019Q2      2019Q3A   0.396767    0.538817    0.419195B   0.685220    0.204452    0.878117是否有可能我將兩個數據框組合在一起,以便生成的數據框df如下所示?如果沒有,是否有允許我合并兩個數據框的解決方法,以便我可以執行類似的操作df['2019Q2'] - df['2018']?    2015        2016        2017        2018        2019Q1      2019Q2      2019Q3A   0.417022    0.720324    0.000114    0.302333    0.396767    0.538817    0.419195   B   0.146756    0.092339    0.186260    0.345561    0.685220    0.204452    0.878117
查看完整描述

1 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

如果稍后需要處理,首先需要將列名轉換為concat字符串:axis=1


df = pd.concat([annual,quarterly], axis=1).rename(columns=str)

print (df)

       2015      2016      2017      2018    2019Q1    2019Q2    2019Q3

A  0.417022  0.720324  0.000114  0.302333  0.396767  0.538817  0.419195

B  0.146756  0.092339  0.186260  0.345561  0.685220  0.204452  0.878117


print (df.columns)

Index(['2015', '2016', '2017', '2018', '2019Q1', '2019Q2', '2019Q3'], dtype='object')


print (df['2019Q2'] - df['2018'])

A    0.236484

B   -0.141108

dtype: float64

如果想使用句點,有可能,但更復雜:


df = pd.concat([annual,quarterly], axis=1)

print (df)

       2015      2016      2017      2018    2019Q1    2019Q2    2019Q3

A  0.417022  0.720324  0.000114  0.302333  0.396767  0.538817  0.419195

B  0.146756  0.092339  0.186260  0.345561  0.685220  0.204452  0.878117


print (df[pd.Period('2018', freq='A-DEC')])

A    0.302333

B    0.345561

Name: 2018, dtype: float64


print (df[pd.Period('2019Q2', freq='Q-DEC')])

A    0.538817

B    0.204452

Name: 2019Q2, dtype: float64

print (df[pd.Period('2019Q2', freq='Q-DEC')] - 

       df[pd.Period('2018', freq='A-DEC')])

IncompatibleFrequency:輸入與 Period(freq=Q-DEC) 具有不同的 freq=A-DEC


更改名稱Series以防止錯誤:


print (df[pd.Period('2019Q2', freq='Q-DEC')].rename('a') - 

       df[pd.Period('2018', freq='A-DEC')].rename('a'))


A    0.236484

B   -0.141108

Name: a, dtype: float64

在我看來,如果需要處理后Periods最好的值,則以相同的頻率工作:


annual.columns = annual.columns.to_timestamp('Q').to_period('Q')

df = pd.concat([annual,quarterly], axis=1)

print (df)

     2015Q1    2016Q1    2017Q1    2018Q1    2019Q1    2019Q2    2019Q3

A  0.417022  0.720324  0.000114  0.302333  0.396767  0.538817  0.419195

B  0.146756  0.092339  0.186260  0.345561  0.685220  0.204452  0.878117


print (df[pd.Period('2019Q2', freq='Q-DEC')] - 

       df[pd.Period('2018Q1', freq='Q-DEC')])


A    0.236484

B   -0.141108

dtype: float64


查看完整回答
反對 回復 2022-06-02
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號