如何在 Pandas 中编写两个变量(列)的条件
How to write a conditional on two variables (columns) in Pandas
我正在尝试计算没有登录但有卡片视图的实例,并创建一个包含计数(或 True)的新列。我使用下面的条件语句并得到一个关键错误。谁能帮我弄清楚这是怎么回事?
import pandas as pd
import numpy as np
sample = pd.DataFrame({ 'Month' : pd.Categorical(["Jan", "Jan", "Feb", "Feb", "March","Apr", "May"]),
'Name' : pd.Categorical(["Peter", "Meg", "Peter", "Meg", "Meg","Lois", "Lois"]),
'Logins': [1, 1, 1, 1, 1, 1, 0],
'Card': [1, 1, 2, 2, 1, 2, 1]})
sample['LoginNoCard'] = sample['Logins'].where((sample['Logins'] == 0) & (sample['Card'] > 0), sample[1])
我这里的解决方案是创建一个新的数据框。我想使用条件创建一个新列。 If Logins == 0 & Card > 0, then 0. If Logins > 0 and Card == 0, then 1. Else NaN.
你可以考虑使用嵌套的np.where()
条件 for if Logins == 0 & Card > 0
, then 0
, if Logins > 0 and Card == 0
, then 1
, else NaN
.
In [81]: np.where(((sample['Logins']==0) & (sample['Card']>0)), 0,
np.where(((sample['Logins']>0) & (sample['Card']==0)), 1,
pd.np.nan))
Out[81]: array([ nan, nan, nan, nan, nan, nan, 0.])
要将其分配给列,您可以
In [82]: sample['LoginNoCard'] = np.where(((sample['Logins']==0) & (sample['Card']>0)), 0,
np.where(((sample['Logins']>0) & (sample['Card']==0)), 1,
pd.np.nan))
In [83]: sample
Out[83]:
Card Logins Month Name LoginNoCard
0 1 1 Jan Peter NaN
1 1 1 Jan Meg NaN
2 2 1 Feb Peter NaN
3 2 1 Feb Meg NaN
4 1 1 March Meg NaN
5 2 1 Apr Lois NaN
6 1 0 May Lois 0
我正在尝试计算没有登录但有卡片视图的实例,并创建一个包含计数(或 True)的新列。我使用下面的条件语句并得到一个关键错误。谁能帮我弄清楚这是怎么回事?
import pandas as pd
import numpy as np
sample = pd.DataFrame({ 'Month' : pd.Categorical(["Jan", "Jan", "Feb", "Feb", "March","Apr", "May"]),
'Name' : pd.Categorical(["Peter", "Meg", "Peter", "Meg", "Meg","Lois", "Lois"]),
'Logins': [1, 1, 1, 1, 1, 1, 0],
'Card': [1, 1, 2, 2, 1, 2, 1]})
sample['LoginNoCard'] = sample['Logins'].where((sample['Logins'] == 0) & (sample['Card'] > 0), sample[1])
我这里的解决方案是创建一个新的数据框。我想使用条件创建一个新列。 If Logins == 0 & Card > 0, then 0. If Logins > 0 and Card == 0, then 1. Else NaN.
你可以考虑使用嵌套的np.where()
条件 for if Logins == 0 & Card > 0
, then 0
, if Logins > 0 and Card == 0
, then 1
, else NaN
.
In [81]: np.where(((sample['Logins']==0) & (sample['Card']>0)), 0,
np.where(((sample['Logins']>0) & (sample['Card']==0)), 1,
pd.np.nan))
Out[81]: array([ nan, nan, nan, nan, nan, nan, 0.])
要将其分配给列,您可以
In [82]: sample['LoginNoCard'] = np.where(((sample['Logins']==0) & (sample['Card']>0)), 0,
np.where(((sample['Logins']>0) & (sample['Card']==0)), 1,
pd.np.nan))
In [83]: sample
Out[83]:
Card Logins Month Name LoginNoCard
0 1 1 Jan Peter NaN
1 1 1 Jan Meg NaN
2 2 1 Feb Peter NaN
3 2 1 Feb Meg NaN
4 1 1 March Meg NaN
5 2 1 Apr Lois NaN
6 1 0 May Lois 0