[英]Pandas convert dummies to a new column
我有一个 dataframe 将客户离散化为不同的 Q,它看起来像:
CustomerID_num Q1 Q2 Q3 Q4 Q5 Country
0 12346 1 0 0 0 0 United Kingdom
2 12347 0 0 0 0 1 Iceland
9 12348 0 1 0 0 0 Finland
13 12349 0 0 0 0 1 Italy
14 12350 0 1 0 0 0 Norway
我想要做的是向 dataframe 添加一个新列 Q,它显示该客户所在的部门,因此它看起来像:
CustomerID_num Q1 Q2 Q3 Q4 Q5 Q Country
0 12346 1 0 0 0 0 1 United Kingdom
2 12347 0 0 0 0 1 5 Iceland
9 12348 0 1 0 0 0 2 Finland
13 12349 0 0 0 0 1 5 Italy
14 12350 0 1 0 0 0 2 Norway
我能想到的唯一方法是使用 for 循环,但它会让我一团糟。 还有其他方法吗?
一种选择是转储到 numpy:
仅过滤Q
列:
cols = df.filter(like = 'Q')
获取等于 1 的列位置:
_, positions = cols.to_numpy().nonzero()
df.assign(Q = positions + 1)
CustomerID_num Q1 Q2 Q3 Q4 Q5 Country Q
0 12346 1 0 0 0 0 United Kingdom 1
2 12347 0 0 0 0 1 Iceland 5
9 12348 0 1 0 0 0 Finland 2
13 12349 0 0 0 0 1 Italy 5
14 12350 0 1 0 0 0 Norway 2
这里有一些其他的选择
d = df.loc[:,lambda x: x.columns.str.startswith('Q')]
选项1:
np.where(d)[-1]+1
选项 2:
np.argmax(d.to_numpy(),axis=1)+1
选项 3:
d.set_axis(range(d.shape[1]),axis=1).idxmax(axis=1)+1
df.loc[df["Q1"] == 1, "Q"] = 1
df.loc[df["Q2"] == 1, "Q"] = 2
df.loc[df["Q3"] == 1, "Q"] = 3
df.loc[df["Q4"] == 1, "Q"] = 4
df.loc[df["Q5"] == 1, "Q"] = 5
This is a possible solution using loc from pandas here is the documentation https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html
当条件为真时,设置名为“Q”的整个列的值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.