Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果同一个键有两个不同的值,如何更改dataframe单元格中的值_Python_Pandas - Fatal编程技术网

Python 如果同一个键有两个不同的值,如何更改dataframe单元格中的值

Python 如果同一个键有两个不同的值,如何更改dataframe单元格中的值,python,pandas,Python,Pandas,我正在用Python编写脚本,我正在寻找以下问题的最佳解决方案: 我有大熊猫数据帧(至少100k行),如果有行在col2中具有相同的值,但在col3中具有不同的值,那么我想更改col3中的所有值以获得一个 例如: ---------------------- | col1 | col2 | col3 | ---------------------- | a | 1 | A | ---------------------- | b | 2 | A | -----

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

我有大熊猫数据帧(至少100k行),如果有行在col2中具有相同的值,但在col3中具有不同的值,那么我想更改col3中的所有值以获得一个

例如:

----------------------
| 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