这是我在 StackOverflow 上的第一个问题,如果我应该以不同的方式表达任何内容,请告诉我...
我想根据与另一列中的值相关的条件替换 pandas Dataframe 列中的一些值,但如果条件为 False,则保留原始值。例如:
import pandas as pd
df=pd.DataFrame({'col1':['A','B','C','B'], 'col2':['z','x','x','x']},
columns=['col1','col2'])
df =
col1 col2
0 A z
1 B x
2 C x
3 B x
比如说,如果 col1 中的值为 'B' 或 'C',我想将 col2 中的值替换为 'q',但保留原始值 ('z','x'),如果col1 不是 B 或 C。实际上,我有更大的 DataFrame,col1 中有数百个唯一值,我想替换 col2 中的大约 20 个值。
我目前的解决方案是创建一个字典,使用 col1 作为键,使用 col2 作为值,然后:
dict1.update({'B':'q'})
df[col2] = df[col1].map(dict1)
但是这个技巧只有在两列中的值完全相关(或者如果 col1 中的值是唯一的)时才有效。
所以我想知道是否有更优雅的解决方案。因此只有当 col1 符合特定条件时才替换 col2 中的值,否则保留原始值。
最佳答案
首先使用 loc
和 isin
屏蔽 df,然后像以前一样调用 map
:
In [376]:
dict1 = {'B':'q'}
df.loc[df['col1'].isin(dict1.keys()), 'col2'] = df['col1'].map(dict1)
df
Out[376]:
col1 col2
0 A z
1 B q
2 C x
3 B q
关于python - 根据其他列中的条件替换 pandas 列中的某些特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919907/