[英]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:
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.