gpt4 book ai didi

python - 如何计算每行特定值的唯一出现次数?

转载 作者:太空宇宙 更新时间:2023-11-03 15:57:42 24 4
gpt4 key购买 nike

我的数据框如下:

df =

DATA TYPE_1 TYPE_2 TYPE_3 EVALUATED
WW A234 456 456 0
AA 456 123A 567 1
BB 456 123A 456 1

df = pd.DataFrame({"DATA":["WW","AA","BB"],"TYPE_1":["A234","456","456"],"TYPE_2":["456","123A","123A"],"TYPE_3":["456","567","456"],"EVALUATED":[0,1,1]})

我正在计算 TYPE*​​ 出现的次数,其中 EVALUATED 等于 0 和 1。这是我正在使用的代码:

grouped = (df.set_index('EVALUATED')
.filter(like='TYPE_')
.stack()
.to_frame('TYPE')
.reset_index()
.pivot_table(index='TYPE', columns='EVALUATED', aggfunc='size', fill_value=0)
).reset_index()

我需要通过仅计算每行 TYPE*​​ 的唯一出现次数来稍微改进此代码。

例如456在第1行出现了两次,但必须只计算一次。

结果应该是这样的:

grouped = 

TYPE 0 1
------------
A234 1 0
456 1 2
123A 0 2
567 0 1

最佳答案

我的解决方案与您的解决方案类似,只是添加了 .apply(lambda x: pd.Series(x.unique()), axis=1) 用于删除行中的重复项和另一个可能的解决方案使用 groupbyunstack 快速 size:

grouped = df.set_index('EVALUATED')
.filter(like='TYPE_')
.apply(lambda x: pd.Series(x.unique()), axis=1)
.stack()
.to_frame('TYPE')
.reset_index()
.groupby(['TYPE', 'EVALUATED'])
.size()
.unstack(fill_value=0)
print (grouped)
EVALUATED 0 1
TYPE
123A 0 2
456 1 2
567 0 1
A234 1 0

您的解决方案:

grouped = (df.set_index('EVALUATED')
.filter(like='TYPE_')
.apply(lambda x: pd.Series(x.unique()), axis=1) #added row for unique rows
.stack()
.to_frame('TYPE')
.reset_index()
.pivot_table(index='TYPE', columns='EVALUATED', aggfunc='size', fill_value=0)
).reset_index()

print (grouped)
EVALUATED TYPE 0 1
0 123A 0 2
1 456 1 2
2 567 0 1
3 A234 1 0

关于python - 如何计算每行特定值的唯一出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42344365/

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