为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2022-04-27 16:28:59
我正在用 Python 编写脚本,我正在寻找以下问题的最佳解决方案:我有大熊猫数据框(至少 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 值的“块”中的值是不同的值时,我会更改 col3 值,但是这个算法需要大约 60 秒来处理 100k 行,我正在寻找更充分的答案。
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

使用GroupBy.transformwithDataFrameGroupBy.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

最后按值覆盖True行A。


查看完整回答
反对 回复 2022-04-27
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信