我有一个名为Transportation的列标题的dataframe,其中有一些值为Car、Bus、Ship或Nan (表示缺失值)。我打算做的是提取交通运输中所有独特的价值(例如,id为3的人和id为6的人可以使用汽车),然后将它们放入新的列标题中。
然后,如果id3的交通工具是Car,那么在Car header下的行值为1,在其他header下的行值为0。对于Nan,所有新生成的header下的值都为0。
发布于 2017-07-02 13:24:29
最简单、最快的方法是使用pandas get_dummies
示例:
考虑一下这个DataFrame df
Transportation
0 car
1 bus
2 plane
3 NaN如果执行以下命令:
new_df = pd.get_dummies(df,prefix='',prefix_sep='')
print(new_df)您将获得以下输出:
bus car plane
0 0 1 0
1 1 0 0
2 0 0 1
3 0 0 0我相信这就是你要找的。
发布于 2017-07-02 13:13:46
我认为这就是分类变量的二进制编码:
def binary_encode(df, field)
df[df['Transportation'] == field][field] = 1
df[df['Transportation'] != field][field] = 0例如,如果你用field='Car‘调用它,它会这样做:
df[df['Transportation'] == 'Car']['Car'] = 1
df[df['Transportation'] != 'Car']['Car'] = 0df[df['Transportation'] == 'Car']只选择数据帧中Transportation列的值为'Car‘的所有行。然后,它的其余部分将值1赋给这些行的Car列。
此时,包含Transportation列的其他值的行将具有NaNs,这是我们不希望看到的。因此,我们使用类似的技术将值0赋给其余的值。
发布于 2017-07-02 13:36:09
使用.apply函数中内置的pandas。
本例中的应用函数将接受一个函数作为输入。此函数将在列系列的每个成员上运行,并生成一个新列。下面是一个使用lambda函数和内联if else语句来简洁地完成此操作的示例:
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)给出一个结果:

https://stackoverflow.com/questions/44867639
复制相似问题