gpt4 book ai didi

python - 如何对 Pandas 列中的唯一名称使用 groupby 和 cumcount

转载 作者:行者123 更新时间:2023-11-28 20:31:26 30 4
gpt4 key购买 nike

我有一个看起来像这样的数据框

 ID ..... config_name    config_version  ...  
aa A 0
ab A 7
ad A 7
ad A 27
bb B 0
cc C 0
cd C 8

我想按 config_name 分组并在每个唯一的 config_version 上应用 cumcount 以便我得到一个额外的列,如

 ID ..... config_name    config_version     config_version_count 
aa A 0 0
ab A 7 1
ad A 7 1
ad A 27 2
bb B 0 0
cc C 0 0
cd C 8 1

但我似乎无法理解该怎么做。

我试过用

      unique_count = df.groupby('config_name')['config_version'].cumcount()
unique_count = pd.DataFrame({'config_name': [unique_count.index], 'config_version_count: [unique.count.values]})
df = pd.merge(df,unique_count, on = 'config_name' , how = 'left')

给出以下输出

 ID ..... config_name    config_version     config_version_count 
aa A 0 0
ab A 7 1
ad A 7 2
ad A 27 3
bb B 0 0
cc C 0 0
cd C 8 1

我也试过

 unique_count = df.drop_duplicates().groupby('config_name')['config_version'].cumcount()
unique_count.reindex(df.index).ffill()
df['config_version_count'] = unique_count

但这给出了与第一次尝试相同的输出。

知道我该怎么做吗?

最佳答案

使用CategoricalIndexCategoricalIndex.codes :

df['config_version_count'] = (df.groupby('config_name')['config_version']
.transform(lambda x: pd.CategoricalIndex(x).codes))

print (df)
ID config_name config_version config_version_count
0 aa A 0 0
1 ab A 7 1
2 ad A 7 1
3 ad A 27 2
4 bb B 0 0
5 cc C 0 0
6 cd C 8 1

您的解决方案应该有效:

df['config_version_count'] = (df.drop_duplicates(['config_name','config_version'])
.groupby('config_name')
.cumcount())
df['config_version_count'] = df['config_version_count'].ffill().astype(int)

关于python - 如何对 Pandas 列中的唯一名称使用 groupby 和 cumcount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54862986/

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