如何在Pandas中写两个变量(列)的条件

时间:2015-06-01 16:03:23

标签: python pandas conditional

我尝试在没有登录时计算实例,但是有一个卡片视图,并使用count(或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])

我在这里的解决方案是创建一个新的数据框架。我想使用条件创建一个新列。如果登录== 0&卡> 0,然后0.如果登录> 0和卡== 0,然后1. Else NaN。

1 个答案:

答案 0 :(得分:0)

您可以考虑对if np.where()使用嵌套Logins == 0 & Card > 0条件,然后0Logins > 0 and Card == 01,否则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