Python:np.where有多个条件

时间:2016-07-28 14:40:03

标签: python numpy pandas

我有df,我尝试创建新列,其中一列的数字是一些短语。 我用

TOO SMALL

我的意思是df["Family"] = np.where(df["Qfamilystatus"] == 1, "Не замужем / Не женат", "Замужем / женат / живу в гражданском браке", "Разведен/ живем порознь", "Вдовец / вдова") 但它返回1 - Не замужем / Не женат, 2 - Замужем / женат / живу в гражданском браке, 3 - Разведен/ живем порознь, 4 - Вдовец / вдова 另一种方法是这样做吗?

1 个答案:

答案 0 :(得分:3)

我认为dictionary需要map功能。

样品:

import pandas as pd


df = pd.DataFrame({'Qfamilystatus':[1,2,3,4]})
print (df)
   Qfamilystatus
0              1
1              2
2              3
3              4

d = {1:"Не замужем / Не женат", 
     2:"Замужем / женат / живу в гражданском браке", 
     3:"Разведен/ живем порознь", 
     4: "Вдовец / вдова"}

df['new'] = df.Qfamilystatus.map(d)
print (df)
   Qfamilystatus                                         new
0              1                       Не замужем / Не женат
1              2  Замужем / женат / живу в гражданском браке
2              3                     Разведен/ живем порознь
3              4                              Вдовец / вдова

然后你可以将新列转换为category,这可以节省内存:

df['new'] = df.Qfamilystatus.map(d).astype('category')
print (df)
   Qfamilystatus                                         new
0              1                       Не замужем / Не женат
1              2  Замужем / женат / живу в гражданском браке
2              3                     Разведен/ живем порознь
3              4                              Вдовец / вдова

print (df.dtypes)
Qfamilystatus       int64
new              category
dtype: object