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

df["Family"] = np.where(df["Qfamilystatus"] == 1, "Не замужем / Не женат", "Замужем / женат / живу в гражданском браке", "Разведен/ живем порознь", "Вдовец / вдова")

我的意思是 1 - Не замужем / Не женат, 2 - Замужем / женат / живу в гражданском браке, 3 - Разведен/ живем порознь, 4 - Вдовец / вдова但它返回 TypeError: function takes at most 3 arguments (5 given)是另一种方法吗?

最佳答案

我认为您需要 map dictionary 函数。

样本:

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

关于Python:具有多个条件的 np.where,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38639577/

10-11 23:25