gpt4 book ai didi

Python:对数据帧进行分组后分别对组使用 apply

转载 作者:行者123 更新时间:2023-12-01 09:32:30 24 4
gpt4 key购买 nike

我的数据框如下所示:

┌────┬──────┬──────┐
│ No │ col1 │ col2 │
├────┼──────┼──────┤
│ 1 │ A │ 5.0 │
│ 1 │ B1 │ 10.0 │
│ 1 │ B2 │ 20.0 │
│ 2 │ A │ 0.0 │
│ 2 │ B1 │ 0.0 │
│ 2 │ C1 │ 0.0 │
│ 3 │ A │ 0.0 │
│ 3 │ B1 │ 5.0 │
│ 3 │ C1 │ 20.0 │
│ 3 │ C2 │ 30.0 │
└────┴──────┴──────┘

首先,我使用groupby按列号对数据框进行分组。

我现在想做三件事:

  1. 从该组所有行中的 No 列(其中 col2 == 0.0)获取值列表(在本例中为 No.2)
  2. 获取 col1 == 'A'col2 != 0.0 的 No 列表,但该组中至少另一行具有 col2 == 0.0(在本例中为 No.3)
  3. 获取 No 列表,其中至少 1 行包含 col2 == 0.0(No.2 和 3)

抱歉一下子问了三个问题。希望没关系。

谢谢:)

最佳答案

您可以使用:

g = df['col2'].eq(0).groupby(df['No'])
a = g.all()
a = a.index[a].tolist()
print (a)
[2]

b1 = (df['col2'].ne(0) & df['col1'].eq('A')).groupby(df['No']).any()
b2 = (df['col2'].eq(0) & df['col1'].ne('A')).groupby(df['No']).any()
b = b1 & b2
b = b.index[b].tolist()
print (b)
[]

c = g.any()
c = c.index[c].tolist()
print (c)
[2,3]

另一个解决方案应该是返回 bool 值DataFrame的自定义函数,并最终创建具有3个列表的字典:

def f(x):
a = x['col2'].eq(0)
b1 = x['col2'].ne(0) & x['col1'].eq('A')
b2 = a & x['col1'].ne('A')
b = b1.any() & b2.any()

return pd.Series([a.all(), b, a.any()], index=list('abc'))

m = df.groupby('No').apply(f)
print (m)
a b c
No
1 False False False
2 True False True
3 False False True

fin = {x: m[x].index[m[x]].tolist() for x in m.columns}
print (fin)
{'a': [2], 'b': [], 'c': [2, 3]}

关于Python:对数据帧进行分组后分别对组使用 apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842343/

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