gpt4 book ai didi

Python - Pandas - 计算字符串中字符出现的次数并替换字符串值

转载 作者:太空狗 更新时间:2023-10-30 02:52:19 24 4
gpt4 key购买 nike

已编辑:

我有以下数据框

Name        Code    
Cedric AMMMM
Joe A
Mickael AMMCX
Dupond MMMMMMM

Jean AMMMCMC

我想计算代码 列值的字符出现次数。并用字符和出现次数的串联替换该值。

我的预期结果如下:

Name        Code    
Cedric 1A4M
Joe 1A
Mickael 1A2M1C1X
Dupond 7M

Jean 1A3M1C1M1C

我试过以下方法:

for index, row in df.iterrows():
for i in "".join(set(row.Code)):
num = test.count(i)
df.loc[index,"Code"] = val + str(num) + i

但实际上我有一个超过 800 000 行的巨大数据框。当我执行这段代码时,这个过程太长了。

我正在寻找更好的解决方案来做到这一点。

已编辑:我在我的数据框中添加了最后一个示例。以前的回复不处理这个例子。我想处理这个用例

感谢您的帮助。

最佳答案

使用 f-string 的列表推导适用于 python 3.6+ 并添加 sorted 按索引不改变顺序:

df['Code'] = [''.join(f'{x.count(i)}{i}' for i in sorted(set(x),key=x.index)) for x in df['Code']]

或者使用Counter :

from collections import Counter

df['Code'] = [''.join(f'{j}{i}' for i, j in Counter(x).items()) for x in df['Code']]


print (df)
Name Code
0 Cedric 1A4M
1 Joe 1A
2 Mickael 1A2M1C1X
3 Dupond 7M

性能:

#[40000 rows x 2 columns]
df = pd.concat([df] * 10000, ignore_index=True)

In [119]: %timeit df['Code'] = [''.join(f'{j}{i}' for i, j in Counter(x).items()) for x in df['Code']]
276 ms ± 9.97 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [120]: %timeit df['Code'] = [''.join(f'{x.count(i)}{i}' for i in sorted(set(x),key=x.index)) for x in df['Code']]
262 ms ± 3.09 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

#U9-Forward solution
In [124]: %timeit df['Code']=df['Code'].apply(lambda x: ''.join([''.join(map(str,i)) for i in Counter(x).items()]))
339 ms ± 51 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

关于Python - Pandas - 计算字符串中字符出现的次数并替换字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53608142/

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