【发布时间】:2018-05-13 05:28:08
【问题描述】:
【问题讨论】:
标签: pandas
【问题讨论】:
标签: pandas
您可以使用duplicated 作为布尔掩码,然后通过loc、mask 或numpy.where 设置NaNs:
df.loc[df['B'].duplicated(), 'B'] = np.nan
df['B'] = df['B'].mask(df['B'].duplicated())
df['B'] = np.where(df['B'].duplicated(), np.nan,df['B'])
如果需要,也可以按B 列删除重复行:
df = df.drop_duplicates(subset=['B'])
示例:
df = pd.DataFrame({
'B': [1,2,1,3],
'A':[1,5,7,9]
})
print (df)
A B
0 1 1
1 5 2
2 7 1
3 9 3
df.loc[df['B'].duplicated(), 'B'] = np.nan
print (df)
A B
0 1 1.0
1 5 2.0
2 7 NaN
3 9 3.0
df = df.drop_duplicates(subset=['B'])
print (df)
A B
0 1 1
1 5 2
3 9 3
【讨论】:
df.drop_duplicates(subset=['B'])
join添加所有列 - 欺骗被NaNs - df = df.join(df.drop_duplicates(subset=['B']), lsuffix='_')替换