Python 熊猫:根据其他列和值本身更改单元格值
我有以下建议:Python 熊猫:根据其他列和值本身更改单元格值,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下建议: category1 category2 A B A C B NaN A NaN 如果满足以下条件,我想将类别2中的值更改为D: category1==A category2==NaN 因此,我的预期产出是: category1 category2 A B A C B NaN A D 我尝试了两种方法: df
category1 category2
A B
A C
B NaN
A NaN
如果满足以下条件,我想将类别2中的值更改为D
:
category1==A
category2==NaN
因此,我的预期产出是:
category1 category2
A B
A C
B NaN
A D
我尝试了两种方法:
df.loc[((df.category1 == "A") & (df.category2 == 'nan')), "category2"] = "D" # doesn't change anything
及
为什么这两行都不起作用?请使用以下命令:
df.loc[df.category2.isna()&df.category1.eq('A'),'category2']='D'
print(df)
使用以下命令:
df.loc[df.category2.isna()&df.category1.eq('A'),'category2']='D'
print(df)
错误:
ValueError:应同时给出x和y或两者都不给出
告诉您当条件为True
时,np.where
需要一个值,可以从中选择,也可以选择False
。在您的情况下,它只知道当它为True
时,您需要D
。相反,你应该:
df['category2'] = np.where(((df['category1'] == 'A') & (df['category2'].isna())),
"D", df['category2'])
错误:
ValueError:应同时给出x和y或两者都不给出
告诉您当条件为True
时,np.where
需要一个值,可以从中选择,也可以选择False
。在您的情况下,它只知道当它为True
时,您需要D
。相反,你应该:
df['category2'] = np.where(((df['category1'] == 'A') & (df['category2'].isna())),
"D", df['category2'])
需要澄清的是,这之所以有效,主要是因为.isna()
(也可以使用.isnull()
,它不是使用.eq()
(你仍然可以使用=='A'
而不是.eq('A')
)来获得相同的结果。你原来的代码既不能工作,也不能工作
等于NaN
。测试pandas中的值是否为null最安全的方法是。isnull()
只是为了清除,之所以有效的主要原因是因为。isna()
(也可以使用.isnull()
,而不是使用.eq()
(您仍然可以使用='a'
,而不是.eq('a'))
用于相同的结果)。原始代码不起作用。bc'nan'
或“
等于nan
。测试pandas中的值是否为null的最安全方法是.isnull()
np。其中
解决方案在编写单个列时比loc[]快一点我猜。np.where
solution在编写单个列时比loc[]快一点。