gpt4 book ai didi

python - 如果有两个不同的值具有相同的键,如何更改数据框单元格中的值

转载 作者:行者123 更新时间:2023-12-01 00:40:16 24 4
gpt4 key购买 nike

我正在用Python编写脚本,我正在寻找以下问题的最佳解决方案:

我有 Pandas 数据框(至少 100k 行),如果 col2 中的值相同但 col3 中的值不同,那么我想更改 col3 中 A 的所有值

例如:

----------------------
| col1 | col2 | col3 |
----------------------
| a | 1 | A |
----------------------
| b | 2 | A |
----------------------
| c | 2 | B |
----------------------
| d | 2 | B |
----------------------
| e | 3 | B |
----------------------
| f | 3 | B |
----------------------

应该看起来像这样:

----------------------
| col1 | col2 | col3 |
----------------------
| a | 1 | A |
----------------------
| b | 2 | A |
----------------------
| c | 2 | A |
----------------------
| d | 2 | A |
----------------------
| e | 3 | B |
----------------------
| f | 3 | B |
----------------------

我通过对 col2 上的数据帧进行排序并迭代行来解决这个问题,每当 col2 中的值发生变化并且相同 col2 值的“ block ”中是不同的值时,我会更改 col3 值,但该算法需要大约 60 秒才能处理 100k 行,并且我我正在寻找更充分的答案。

最佳答案

使用GroupBy.transformDataFrameGroupBy.nunique用于测试唯一值的数量并按 DataFrame.loc 中的条件设置新值:

df.loc[df.groupby('col2')['col3'].transform('nunique') != 1, 'col3'] = 'A' 
print (df)
col1 col2 col3
0 a 1 A
1 b 2 A
2 c 2 A
3 d 2 A
4 e 3 B
5 f 3 B

详细信息:

首先使用 transform 检查每个组的唯一值数量,以获取与原始 DataFrame 相同大小的系列:

print (df.groupby('col2')['col3'].transform('nunique'))
0 1
1 2
2 2
3 2
4 1
5 1
Name: col3, dtype: int64

然后测试不等于:

print (df.groupby('col2')['col3'].transform('nunique') != 1)
0 False
1 True
2 True
3 True
4 False
5 False
Name: col3, dtype: bool

最后按值 A 覆盖 True 行。

关于python - 如果有两个不同的值具有相同的键,如何更改数据框单元格中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57407761/

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