gpt4 book ai didi

python - 计算数据帧每一行中元素的出现次数

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:25 38 4
gpt4 key购买 nike

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

enter image description here

数据框有 11 列,每列都分配了一个等级。对于每条记录,我需要计算其中的 ABC 的数量。

这就是我想要的输出结果

enter image description here

我尝试使用 apply 函数来执行此操作。这是我目前所拥有的

import pandas as pd
# sample data
df_dict = {'level_1': {0: 'C', 1: 'A', 2: 'C', 3: 'B', 4: 'A', 5: 'C', 6: 'A', 7: 'B', 8: 'B'},
'level_2': {0: 'B', 1: 'B', 2: 'C', 3: 'A', 4: 'A', 5: 'C', 6: 'B', 7: 'C', 8: 'A'},
'level_3': {0: 'B', 1: 'A', 2: 'B', 3: 'A', 4: 'B', 5: 'B', 6: 'C', 7: 'B', 8: 'C'},
'level_4': {0: 'A', 1: 'C', 2: 'B', 3: 'C', 4: 'B', 5: 'C', 6: 'A', 7: 'B', 8: 'C'},
'level_5': {0: 'B', 1: 'B', 2: 'B', 3: 'A', 4: 'A', 5: 'A', 6: 'B', 7: 'B', 8: 'A'},
'level_6': {0: 'C', 1: 'C', 2: 'C', 3: 'B', 4: 'B', 5: 'B', 6: 'C', 7: 'A', 8: 'C'},
'level_7': {0: 'C', 1: 'A', 2: 'C', 3: 'C', 4: 'C', 5: 'C', 6: 'C', 7: 'A', 8: 'A'},
'level_8': {0: 'B', 1: 'A', 2: 'B', 3: 'B', 4: 'B', 5: 'A', 6: 'A', 7: 'A', 8: 'C'},
'level_9': {0: 'A', 1: 'B', 2: 'A', 3: 'C', 4: 'C', 5: 'B', 6: 'A', 7: 'C', 8: 'B'},
'level_10': {0: 'B', 1: 'C', 2: 'A', 3: 'A', 4: 'A', 5: 'A', 6: 'A', 7: 'A', 8: 'C'},
'level_11': {0: 'C', 1: 'B', 2: 'C', 3: 'B', 4: 'C', 5: 'B', 6: 'B', 7: 'C', 8: 'B'}
}
sample_df = pd.DataFrame(df_dict)

# function to count the values of A, B, C
def count_in_df(series):
_ = series.value_counts()
_ = _[['A', 'B', 'C']]
return _.tolist()

count_df = pd.DataFrame(sample_df.apply(count_in_df, axis=1).tolist(),
columns=['counts_of_A', 'counts_of_B', 'counts_of_C'])

# add count information back
sample_df = sample_df.join(count_df)

这给了我需要的信息,但问题是代码太慢了。我有大约 70 万条记录和 66 列(而不是 11 列),我需要在其中执行此操作,我花了大约 30 分钟才得到结果。

有什么方法可以加快代码速度吗?我可以尝试任何优化吗?

最佳答案

stack + groupby + value_counts 用于一些简单的事情。重命名列然后追加回来。

df = (sample_df
.stack()
.groupby(level=0)
.value_counts()
.unstack(1)
.add_prefix('counts_of_')
)

df = pd.concat([sample_df, df], axis=1)

输出:df

   count_of_A  count_of_B  count_of_C
0 2 5 4
1 4 4 3
2 2 4 5
3 4 4 3
4 4 4 3
5 3 4 4
6 5 3 3
7 4 4 3
8 3 3 5

关于python - 计算数据帧每一行中元素的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56607610/

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