gpt4 book ai didi

python - 将聚合行分成不同的行,在 pandas 中添加唯一计数

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

我有一个包含多个行和列的数据集,但是在标记为“事件”的列中,我希望删除聚合并将其分成自己的唯一计数。我还希望添加一列,为该计数提供唯一的 ID。

数据

Pair    gen     box    date     active

sox black bl 2021 3
sox red re 2021 2

所需

Pair    gen     box    date     active    count

sox black bl 2021 1 b101
sox black bl 2021 1 bl02
sox black bl 2021 1 bl02
sox red re 2021 1 re01
sox red re 2021 1 re02

“事件”列现在分别具有 3 和 2 个不同的行,以及不同的计数 ID(基于“框”列)而不是聚合。

一位 SO 帮助解决了类似的困境,我正在采取这种方法:

# Melt Table Into New Form
df = df.melt(col_level=0, value_name='count', var_name='bl')

# Repeat Based on Count
df = df.reindex(df.index.repeat(df['count']))
# Set Count To 1
df['count'] = 1


# Add Suffix to Each ID
df['ID'] = df['ID'] + (
(df.groupby('ID').cumcount() + 1)
.astype(str)
.str.zfill(2)
)

这有效,但是,我无法保留其他列以及设置单独的变量名称,例如:

bl01
bl02

re01
re02

如有任何建议或建议,我们将不胜感激

最佳答案

您不需要melt来解决此问题,并且可以使用以下命令重新索引重复。请记住,对于 count 列,我意识到如果每个组的大小 > 10 ,它将显示为 bl010 作为例如,当您确实想要 bl10 时。数字格式适用于提供的示例数据,但组大小小于 10,并且组大小 > 10,不清楚所需的输出是什么:

df = df.reindex(df.index.repeat(df['active'])).assign(active=1)
df['count'] = df['box'] + '0' + (df.groupby(['Pair', 'gen', 'box']).cumcount() + 1).astype(str)
df
Out[1]:
Pair gen box date active count
0 sox black bl 2021 1 bl01
0 sox black bl 2021 1 bl02
0 sox black bl 2021 1 bl03
1 sox red re 2021 1 re01
1 sox red re 2021 1 re02

关于python - 将聚合行分成不同的行,在 pandas 中添加唯一计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67512439/

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