我在Numpy和Pandas工作。
我有一个贷款表,其特征是 * 国家 * 和 * 部门 *。
| 贷款数量|行业|国家|
| - -----|- -----|- -----|
| 贷款1|食物|德国|
| 贷款2|电信|意大利|
| 贷款3|汽车|日本|
| 贷款4|食物|日本|
| 贷款5|电信|德国|
| 贷款6|汽车|意大利|
我需要下降的部门和国家的重复,即.选择这2个特征的唯一值,并将它们用作列,如果贷款在该国家或部门处于活动状态,则创建一个布尔值为1/0的表,如下所示:
| 贷款数量|食物|电信|汽车|德国|意大利|日本|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 贷款1| 1| 0| 0| 1| 0| 0|
| 贷款2| 0| 1| 0| 0| 1| 0|
| 贷款3| 0| 0| 1| 0| 0| 1|
| 贷款4| 1| 0| 0| 0| 0| 1|
| 贷款5| 0| 1| 0| 1| 0| 0|
| 贷款6| 0| 0| 1| 0| 1| 0|
所以,第一个表中的Loan 1以食品为部门,以德国为国家;然后,在第二个表中,它在列food和德国上具有1,并且在所有其他列上具有0。
这似乎是一个pivot_table,但我不明白我怎么能把1/0作为值?顺便问一下,最简单的方法是什么?
谢谢
3条答案
按热度按时间tpgth1q71#
可以使用
get_dummies
和groupby.sum
:.groupby(level=0).max().astype(int)
。*输出:
备选方案:
关于
str.get_dummies
crosstab
ryevplcw2#
如果你使用
sklearn
,你可以使用OneHotEncoder
和ColumnTransformer
:输出:
w6mmgewl3#
你要找的是独热编码。有一个关于如何从pd.DataFrame()中获取的很棒的线程:How can I one hot encode in Python?
控制论的回答相当彻底
编辑:mozway在这个线程上的回答是完全正确的--getdummy的是pandas fxn的one-hot编码,我相信他们在链接的线程中使用了相同的编码