我有两个具有相同列名的pandas数据帧,以及相同的(两个)多索引列('符号'和' date')但是一些索引是不同的一些数据不同。
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()
的内部连接,并且只保留索引列。有没有办法一次性执行此操作?
目前我的做法很难:
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的东西?如果是这样,怎么样?
答案 0 :(得分:1)
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