gpt4 book ai didi

python - 通过将列与多索引组进行比较来过滤 Pandas 数据框

转载 作者:行者123 更新时间:2023-11-28 22:41:10 25 4
gpt4 key购买 nike

我有一个像下面这样的 pandas DataFrame:

df = pandas.DataFrame({'A' : ['foo', 'foo', 'foo', 'foo', 'bar', 'bar', \
'bar', 'bar', 'baz', 'baz', 'baz', 'baz'],\
'B' : ['one', 'one', 'two', 'two', 'one', 'one', \
'two', 'two', 'one', 'one', 'two', 'two'],\
'C' : pandas.np.random.randn(12)})

df

A B C
0 foo one -0.241101
1 foo one -0.658436
2 foo two 0.300752
3 foo two -0.589445
4 bar one 1.775511
5 bar one 0.068603
6 bar two -0.464550
7 bar two -0.621055
8 baz one -1.469311
9 baz one 0.490963
10 baz two -0.606491
11 baz two -0.006323

我想做的是过滤掉 C 中那些小于组 (A,B) 平均值的值。

分组工作:

groups = df.groupby([df.A, df.B])
upper_bound = groups.C.mean()
upper_bound

A B
bar one 0.922057
two -0.542803
baz one -0.489174
two -0.306407
foo one -0.449768
two -0.144346
Name: C, dtype: float64

但是我现在如何过滤以便(在此示例中)行 1 foo one -0.658436 将被删除

我尝试了以下操作:

df_ = df.loc[df.C <= upper_bound.loc[df.A, df.B]]

但是说

'None of [0     foo\n1     foo\n2     foo\n3     foo\n4     bar\n5     bar\n6     bar\n7     bar\n8     baz\n9     baz\n10    baz\n11    baz\nName: A, dtype: object] are in the [index]'

我试过:

df_ = df.loc[df.C <= upper_bound[df.A, df.B]]

这给了我:

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:3824)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:3492)()
TypeError:

我尝试这种方式的原因是因为我已经(至少我认为)设法做了“相同”的事情,但使用的是一级组:

groups = df.groupby([df.A])
upper_bound = groups.C.mean()
df_ = df.loc[df.C <= upper_bound.loc[df.A]

这实际上消除了 df 中 C 低于 upper_bound 的所有内容。

我做错了什么?

最佳答案

您将 groupby upper_bound 的结果与 df['C'] 进行了比较,但它们的元素数量不同。使用 transform 获取每个组中每条线的平均值,并将其与 df['C'] 进行比较。使用 loc 应用此掩码:

import numpy as np

df.loc[df['C']>=df.groupby(['A','B']).transform(np.mean)['C'],]

Out[13]:
A B C
0 foo one 0.579987
3 foo two 1.701136
5 bar one 1.955158
7 bar two 0.943862
9 baz one -0.628506
10 baz two 1.097203

关于python - 通过将列与多索引组进行比较来过滤 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32820466/

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