在多索引数据帧中的列之间进行数学运算的Pythonic方法,并将结果作为原始数据帧中的一个单独列进行处理
我想弄清楚在多索引数据帧中的列之间进行数学运算的Pythonic方法,并将结果作为原始数据帧中的一个单独列进行处理,python,pandas,dataframe,Python,Pandas,Dataframe,我想弄清楚 cols = pd.MultiIndex.from_product([['Company A','Company B'],['VWAL','Volumn']],names=[u'Entity',u'Indicator']) rows = pd.date_range(start='2018-01-01',periods=6,freq='D') df = pd.DataFrame(np.random.random_integers(1,100,(6,4)),index=rows,colu
cols = pd.MultiIndex.from_product([['Company A','Company B'],['VWAL','Volumn']],names=[u'Entity',u'Indicator'])
rows = pd.date_range(start='2018-01-01',periods=6,freq='D')
df = pd.DataFrame(np.random.random_integers(1,100,(6,4)),index=rows,columns=cols)
In [245]: df
Out[245]:
Entity Company A Company B
Indicator VWAL Volumn VWAL Volumn
2018-01-01 92 3 22 59
2018-01-02 90 67 52 69
2018-01-03 12 10 35 11
2018-01-04 83 7 62 5
2018-01-05 35 74 27 19
2018-01-06 97 50 93 39
如果我想分别计算每个公司的第3列=VWAL+Volumn,第4列=VWAL Volumn,并将它们作为各自公司下的单独列连接起来,那么最有效的方法是什么?(注意:可能会有数千家公司,几年内会有很多行,我正在考虑使用generator在“公司”标签上迭代,以节省内存并加快进程)
我尝试了下面的方法,但在连接结果时,仍然坚持处理多索引
temp = df.loc(axis=1)[:,'VWAL'].values+df.loc(axis=1)[:,'Volumn'].values
df2 = pd.concat([df,temp],axis=1,join='inner',keys=?????)
您可以使用:
- 按列中多索引的第一级和聚合
sum
- 为对齐数据创建多索引
- 并按名称对列进行排序
df1 = df.groupby(axis=1, level=0).sum()
df1.columns = pd.MultiIndex.from_product([df1.columns, ['new']])
print (df1)
Company A Company B
new new
2018-01-01 160 117
2018-01-02 142 185
2018-01-03 145 107
2018-01-04 144 110
2018-01-05 116 178
2018-01-06 119 124
df = pd.concat([df, df1], axis=1).sort_index(axis=1)
print (df)
Entity Company A Company B
Indicator VWAL Volumn new VWAL Volumn new
2018-01-01 67 93 160 99 18 117
2018-01-02 84 58 142 87 98 185
2018-01-03 97 48 145 74 33 107
2018-01-04 47 97 144 26 84 110
2018-01-05 79 37 116 97 81 178
2018-01-06 69 50 119 56 68 124