gpt4 book ai didi

python - 找到值(value)并将其扩展到 pandas 中的分组

转载 作者:行者123 更新时间:2023-12-04 15:04:14 25 4
gpt4 key购买 nike

我需要像这样转换 pandas toy-dataframe(基本上按 entity 分组,找到 v 的值 df['gr'] = = 'x' 并将该值“扩展”到整个分组):

entity  gr  v
0 A x 1
1 A y 2
2 A z 3
3 B z 4
4 B x 5
5 B y 6

到这个表格:

    entity  gr  v   new
0 A x 1 1
1 A y 2 1
2 A z 3 1
3 B z 4 5
4 B x 5 5
5 B y 6 5

这是我的解决方案:

import pandas as pd

df = pd.DataFrame({'entity': ['A', 'A', 'A','B', 'B', 'B'], 'gr': ['x', 'y', 'z', 'z', 'x', 'y'], 'v': [1,2,3,4,5,6]})

df['new'] = df.loc[df['gr'] == 'x', 'v']
df['new'] = df.groupby('entity')['new'].ffill().bfill().astype(int)

但我想知道是否存在更好、更简洁或惯用的方法来解决这个问题?

这个问题的细微变化,而不是 df['gr'] == 'x',不同的掩码 df['gr'] == df['different_column']

最佳答案

如果每个 entity 始终只匹配一个值或没有值是可能的,则首先过滤,然后将 entity 转换为索引并使用 Series.map :

df['new'] = df['entity'].map(df[df['gr'] == 'x'].set_index('entity')['v'])

print (df)
entity gr v new
0 A x 1 1
1 A y 2 1
2 A z 3 1
3 B z 4 5
4 B x 5 5
5 B y 6 5

您的解决方案应更改为 GroupBy.firstGroupBy.transform :

df['new'] = (df.assign(new = df['v'].where(df['gr'] == 'x'))
.groupby('entity')['new'].transform('first'))

print (df)
entity gr v new
0 A x 1 1.0
1 A y 2 1.0
2 A z 3 1.0
3 B z 4 5.0
4 B x 5 5.0
5 B y 6 5.0

关于python - 找到值(value)并将其扩展到 pandas 中的分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66456769/

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