簡體   English   中英

熊貓通過multiindex在其他數據框中創建數據框中的額外列

[英]pandas create extra columns in dataframe from other dataframe by multiindex

我有兩個具有相同列名的熊貓數據框,以及相同的(兩個)多索引列(“符號”和“日期”),但其中一些索引不同,而某些數據也不同。

df1 index columns: ['symbol','date']
symbol  date     o    c
aa      2015/1/1 1    1
aa      2015/2/1 2    2
bb      2015/1/1 71   71

df2 index columns: ['symbol','date']

symbol  date     o    c
aa      2015/1/1 1    1
bb      2016/2/1 2    2
bb      2015/1/1 51   55

我首先要創建一個僅包含兩行的共享數據框(具有默認dataframe.merge dataframe.merge()的innerjoin並僅保留索引列。有什么方法可以一次完成嗎?

目前,我很難做到:

merged = df1.merge(df2)  
analyzed = merged[['symbol','date']].copy

現在出現問題:

我想使用以下各列來分析數據幀:o1 c1 o2 c2,其中包含來自兩個文件的數據。 如何“ .loc”按索引獲取數據?

我想要類似以下代碼的東西,但這給出了一個例外:

analyzed['o1'] = analyzed.apply(lambda row: df1['o'].loc[[row.symbol, row.date]]
# or maybe like this: 
analyzed['o1'] = analyzed.apply(lambda row: df1.at[ [row['symbol'], row['date']], 'o'] )

我該怎么做呢? 或者(以另一種方式詢問)如何獲取當前行的符號和日期值,以及如何使用它們在df1(或df2)中設置相應的行? 也許有get_level_values的東西? 如果是這樣,怎么辦?

IIUC:

使用join:

analyze = df1.join(df2,lsuffix='_l')

輸出:

                 o_l  c_l     o     c
symbol date                          
aa     2015/1/1    1    1   1.0   1.0
       2015/2/1    2    2   NaN   NaN
bb     2015/1/1   71   71  51.0  55.0

選擇:

analyze.loc[('aa','2015/1/1')]

o_l    1.0
c_l    1.0
o      1.0
c      1.0
Name: (aa, 2015/1/1), dtype: float64

使用索引合並:

analyze1 = df1.merge(df2, left_index=True, right_index=True)

輸出:

                 o_x  c_x  o_y  c_y
symbol date                        
aa     2015/1/1    1    1    1    1
bb     2015/1/1   71   71   51   55

選擇:

analyze1.loc[('aa','2015/1/1')]

o_x    1
c_x    1
o_y    1
c_y    1
Name: (aa, 2015/1/1), dtype: int64

暫無
暫無

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

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