首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将dataframe中字符串列的唯一值转换为值为0或1的新的多个头

将dataframe中字符串列的唯一值转换为值为0或1的新的多个头
EN

Stack Overflow用户
提问于 2017-07-02 13:07:13
回答 3查看 1.4K关注 0票数 1

我有一个名为Transportation的列标题的dataframe,其中有一些值为Car、Bus、Ship或Nan (表示缺失值)。我打算做的是提取交通运输中所有独特的价值(例如,id为3的人和id为6的人可以使用汽车),然后将它们放入新的列标题中。

然后,如果id3的交通工具是Car,那么在Car header下的行值为1,在其他header下的行值为0。对于Nan,所有新生成的header下的值都为0。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-02 13:24:29

最简单、最快的方法是使用pandas get_dummies

示例:

考虑一下这个DataFrame df

代码语言:javascript
复制
  Transportation
0            car
1            bus
2          plane
3            NaN

如果执行以下命令:

代码语言:javascript
复制
new_df = pd.get_dummies(df,prefix='',prefix_sep='')
print(new_df)

您将获得以下输出:

代码语言:javascript
复制
   bus  car  plane
0    0    1      0
1    1    0      0
2    0    0      1
3    0    0      0

我相信这就是你要找的。

票数 6
EN

Stack Overflow用户

发布于 2017-07-02 13:13:46

我认为这就是分类变量的二进制编码:

代码语言:javascript
复制
def binary_encode(df, field) 
    df[df['Transportation'] == field][field] = 1
    df[df['Transportation'] != field][field] = 0

例如,如果你用field='Car‘调用它,它会这样做:

代码语言:javascript
复制
df[df['Transportation'] == 'Car']['Car'] = 1
df[df['Transportation'] != 'Car']['Car'] = 0

df[df['Transportation'] == 'Car']只选择数据帧中Transportation列的值为'Car‘的所有行。然后,它的其余部分将值1赋给这些行的Car列。

此时,包含Transportation列的其他值的行将具有NaNs,这是我们不希望看到的。因此,我们使用类似的技术将值0赋给其余的值。

票数 2
EN

Stack Overflow用户

发布于 2017-07-02 13:36:09

使用.apply函数中内置的pandas。

本例中的应用函数将接受一个函数作为输入。此函数将在列系列的每个成员上运行,并生成一个新列。下面是一个使用lambda函数和内联if else语句来简洁地完成此操作的示例:

代码语言:javascript
复制
import pandas as pd
import numpy as np

# Creating a sample list which contains the transportation list
transportation_list = ["Car","Bus","Ship",np.nan,"Car","Bus","Ship",np.nan]

# Make a pandas Dataframe with a single column called transportation
df = pd.DataFrame({"Transportation":transportation_list})

# Create additional columns by applying the lambda function to each row in 
# the transportation column and set the value equal to zero or one depending 
# on equivalence to test value.
df['car'] = df["Transportation"].apply(lambda transport_type:1 if "Car" == transport_type else 0)
df['bus'] = df["Transportation"].apply(lambda transport_type:1 if "Bus" == transport_type else 0)
df['ship'] = df["Transportation"].apply(lambda transport_type:1 if "Ship" == transport_type else 0)

给出一个结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44867639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档