我有 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/