pandas 多索引数据框中的组之间的计算 [英] Calculation between groups in a Pandas multiindex dataframe

查看:67
本文介绍了 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆