gpt4 book ai didi

python - 将行附加到 Pandas groupby 对象

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:53 25 4
gpt4 key购买 nike

我正在尝试找出将方法插入回多索引 pandas 数据帧的最佳方法。

假设我有一个这样的数据框:

      metric 1     metric 2    
R P R P
foo a 0 1 2 3
b 4 5 6 7
bar a 8 9 10 11
b 12 13 14 15

我想得到以下结果:

      metric 1     metric 2    
R P R P
foo a 0 1 2 3
b 4 5 6 7
AVG 2 3 4 5
bar a 8 9 10 11
b 12 13 14 15
AVG 10 11 12 13

请注意,我知道我可以执行 df.mean(level=0) 以将 0 级组均值作为单独的数据框。这不是我想要的——我想将组作为行插入到组中。

我能够得到我想要的结果,但我觉得我做错了/我可能错过了一个没有昂贵的 python 迭代的衬垫已经做到了这一点。这是我的示例代码:

import numpy as np
import pandas as pd

data = np.arange(16).reshape(4,4)
row_index = [("foo", "a"), ("foo", "b"), ("bar", "a"), ("bar", "b")]
col_index = [("metric 1", "R"), ("metric 1", "P"), ("metric 2", "R"),
("metric 2", "P")]
col_multiindex = pd.MultiIndex.from_tuples(col_index)
df = pd.DataFrame(data, index=pd.MultiIndex.from_tuples(row_index),
columns=col_multiindex)

new_row_index = []
data = []
for name, group in df.groupby(level=0):
for index_tuple, row in group.iterrows():
new_row_index.append(index_tuple)
data.append(row.tolist())
new_row_index.append((name, "AVG"))
data.append(group.mean().tolist())

print pd.DataFrame(data,
index=pd.MultiIndex.from_tuples(new_row_index),
columns=col_multiindex)

结果是:

        metric 1     metric 2    
R P R P
bar a 8 9 10 11
b 12 13 14 15
AVG 10 11 12 13
foo a 0 1 2 3
b 4 5 6 7
AVG 2 3 4 5

出于某种原因它会翻转组的顺序,但或多或​​少是我想要的。

最佳答案

您在这里需要做的主要事情是将您的方法附加到主数据集。在这样做之前你需要的主要技巧只是使索引一致(使用 reset_index()set_index() 这样在你附加它们之后它们将或多或少排队并准备根据相同的键进行排序。

In [35]: df2 = df.groupby(level=0).mean()

In [36]: df2['index2'] = 'AVG'

In [37]: df2 = df2.reset_index().set_index(['index','index2']).append(df).sort()

In [38]: df2
Out[38]:
metric 1 metric 2
R P R P
index index2
bar AVG 10 11 12 13
a 8 9 10 11
b 12 13 14 15
foo AVG 2 3 4 5
a 0 1 2 3
b 4 5 6 7

就行排序而言,最好的办法可能只是设置名称,以便排序将它们放在正确的位置(例如 A、B、avg)。或者对于少量行,您可以只使用花哨的索引:

In [39]: df2.ix[[4,5,3,1,2,0]]
Out[39]:
metric 1 metric 2
R P R P
index index2
foo a 0 1 2 3
b 4 5 6 7
AVG 2 3 4 5
bar a 8 9 10 11
b 12 13 14 15
AVG 10 11 12 13

关于python - 将行附加到 Pandas groupby 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com