替换为多个未在 pandas 中更新的条件
Posted
技术标签:
【中文标题】替换为多个未在 pandas 中更新的条件【英文标题】:replace with multiple conditions not updating in pandas 【发布时间】:2022-01-23 21:50:06 【问题描述】:我正在尝试根据行索引替换一个值,并且只替换数据框中的某些列。
对于 b 和 c 列,我想将值 1 替换为 np.nan
,用于第 1、2 和 3 行
df = pd.DataFrame(data='a': ['"dog", "cat"', '"dog"', '"mouse"', '"mouse", "cat", "bird"', '"circle", "square"', '"circle"', '"triangle", "square"', '"circle"'],
'b': [1,1,3,4,5,1,2,3],
'c': [3,4,1,3,2,1,0,0],
'd': ['a','a','b','c','b','c','d','e'],
'id': ['group1','group1','group1','group1', 'group2','group2','group2','group2'])
我正在使用以下行,但它没有更新到位,如果我尝试分配它,则只返回修改行的子集,而不是原始数据帧的更新版本。
df[df.index.isin([1,2,3])][['b','c']].replace(1, np.nan, inplace=True)
【问题讨论】:
【参考方案1】:你可以这样做:
df.loc[1:3, ['b', 'c']] = df.loc[1:3, ['b', 'c']].replace(1, np.nan)
输出:
>>> df
a b c d id
0 "dog", "cat" 1.0 3.0 a group1
1 "dog" NaN 4.0 a group1
2 "mouse" 3.0 NaN b group1
3 "mouse", "cat", "bird" 4.0 3.0 c group1
4 "circle", "square" 5.0 2.0 b group2
5 "circle" 1.0 1.0 c group2
6 "triangle", "square" 2.0 0.0 d group2
7 "circle" 3.0 0.0 e group2
更动态的版本:
cols = ['b', 'c']
rows = slice(1, 3) # or [1, 2, 3] if you want
df.loc[rows, cols] = df.loc[rows, cols].replace(1, np.nan)
【讨论】:
以上是关于替换为多个未在 pandas 中更新的条件的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas根据多个其他列中的条件替换一列中的值[重复]