繁体   English   中英

如何根据 pandas 中的其他列替换列值?

[英]How to replace column values based on other columns in pandas?

假设,我有一个数据框,例如

import pandas as pd 
df = pd.DataFrame({'visitor':['A','B','C','D','E'],
                   'col1':[1,2,3,4,5],
                   'col2':[1,2,4,7,8],
                   'col3':[4,2,3,6,1]})
游客 col1 列2 列3
一种 1个 1个 4个
2个 2个 2个
C 3个 4个 3个
4个 7 6个
5个 8个 1个

对于每一行/访问者,(1) 首先,如果有任何相同的值,我想保留每行的第一个值,然后用 NULL 替换同一行中相同值的 rest,例如

游客 col1 列2 列3
一种 1个 NULL 4个
2个 NULL NULL
C 3个 4个 NULL
4个 7 6个
5个 8个 1个

然后 (2) 保留具有超过 1 个值的行/访问者,例如
最终数据框

游客 col1 列2 列3
一种 1个 NULL 4个
C 3个 4个 NULL
4个 7 6个
5个 8个 1个

有什么建议么? 非常感谢

我们可以沿列轴使用series.duplicated来识别重复项,然后使用where屏蔽重复项并过滤非重复值之和大于 1 的行

s = df.set_index('visitor')
m = ~s.apply(pd.Series.duplicated, axis=1)

s.where(m)[m.sum(1).gt(1)]

         col1  col2  col3
visitor                  
A           1   NaN   4.0
C           3   4.0   NaN
D           4   7.0   6.0
E           5   8.0   1.0

让我们尝试使用pd.Series.duplicated进行mask ,然后使用thresh进行dropna

out = df.mask(df.apply(pd.Series.duplicated,1)).dropna(thresh = df.shape[1]-1)
Out[321]: 
  visitor  col1  col2  col3
0       A     1   NaN   4.0
2       C     3   4.0   NaN
3       D     4   7.0   6.0
4       E     5   8.0   1.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM