pandas 多索引数据框中的组之间的计算 [英] Calculation between groups in a Pandas multiindex dataframe
本文介绍了 pandas 多索引数据框中的组之间的计算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我生成一个多索引数据帧,如下所示:
Suppose I generate a multi-index data frame as follows:
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
0 1 2 3
bar one -0.155088 -0.177214 -0.761230 -0.106045
two 1.930298 -0.309573 -0.051878 -0.388760
baz one 0.111287 1.374426 0.408575 1.555659
two -0.809201 -0.168658 0.055037 1.871289
foo one 0.286833 -0.988538 0.918153 0.841016
two 0.348741 0.403747 0.584992 -1.838409
qux one 1.212017 -0.224872 0.616604 1.080590
two 0.494800 -0.089214 0.829222 2.005217
如何创建新列,即列#3列值上的组一个"和两个"之间的比率(例如,第一个元素为-0.106045/-0.388760)?
How do I create a new column, which is the ratio between group 'one' and 'two' on the their #3 column value (e.g. first element would be -0.106045 / -0.388760)?
如何将其与当前数据框一起显示?
How can I show it in conjunction with the current data frame?
推荐答案
具有不同的随机数.使用转换:
With different random numbers. Use a transform:
In [11]: df.groupby(level=0)[3].transform(lambda x: x[0]/ x[1])
Out[11]:
bar one -1.391651
two -1.391651
baz one -1.688734
two -1.688734
foo one -1.128344
two -1.128344
qux one -2.170493
two -2.170493
Name: 3, dtype: float64
要显示此内容,请将其设置为列:
to show this, set it as a column:
In [12]: df["ratio"] = df.groupby(level=0)[3].transform(lambda x: x[0]/ x[1])
这篇关于 pandas 多索引数据框中的组之间的计算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文