我有一个这样的DataFrame:
| 列1|列2|第3栏|第4栏|
| - ------|- ------|- ------|- ------|
| 五个|七|十二|九|
| 无|九|九|1个|
| 九|九|1个|1个|
| 十个|五个|第二章|九|
| 九|三个|无|十八|
每一行至少有一个9,对于每一行,我想用90替换它的第一个示例。
目前,我正在:
out = df.mask(df.eq(9) & df.apply(lambda x: ~x.duplicated(), axis=1), 90)
还有比这更好/更快的方法吗?
预期产出:
col1 col2 col3 col4
0 5 7 12 90
1 0 90 9 1
2 90 9 1 1
3 10 5 2 90
4 90 3 0 18
施工单位:
data = {'col1': [5, 0, 9, 10, 9],
'col2': [7, 9, 9, 5, 3],
'col3': [12, 9, 1, 2, 0],
'col4': [9, 1, 1, 9, 18]}
df = pd.DataFrame(data)
4条答案
按热度按时间kx5bkwkv1#
您可以使用
numpy
assign进行检查des4xlb02#
使用
idxmax
的一种方法:输出:
这比原始代码快了大约2.5倍:
dohp0rv53#
您可以使用
eq
+cummax
+^
:输出:
nhaq1z214#
下面是另一种方法:
更新:
下面是使用
rank()
的方法这里有一种使用
idxmax()
的方法或
输出: