Python 如果同一个键有两个不同的值,如何更改dataframe单元格中的值
我正在用Python编写脚本,我正在寻找以下问题的最佳解决方案: 我有大熊猫数据帧(至少100k行),如果有行在col2中具有相同的值,但在col3中具有不同的值,那么我想更改col3中的所有值以获得一个 例如:Python 如果同一个键有两个不同的值,如何更改dataframe单元格中的值,python,pandas,Python,Pandas,我正在用Python编写脚本,我正在寻找以下问题的最佳解决方案: 我有大熊猫数据帧(至少100k行),如果有行在col2中具有相同的值,但在col3中具有不同的值,那么我想更改col3中的所有值以获得一个 例如: ---------------------- | col1 | col2 | col3 | ---------------------- | a | 1 | A | ---------------------- | b | 2 | 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值,但此算法对100k行大约需要60秒,我正在寻找更充分的答案。用于测试唯一值的数量,并按条件在中设置新值:
详细信息:
首先使用transform
检查与原始数据帧相同大小序列的每组唯一值的数量:
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
每次都会将值更新为“A”,或者有一些规则要更新哪个值?您可以尝试使用pysparkbeat me来更新它!:D
print (df.groupby('col2')['col3'].transform('nunique') != 1)
0 False
1 True
2 True
3 True
4 False
5 False
Name: col3, dtype: bool