我有一个名为Transportation的列标题的数据框,其中包含一些Car,Bus,Ship或Nan值(缺失值)。我打算做的是提取运输中的所有独特价值(例如,身份3的人和身份6的人可能有汽车运输),然后将它们放入新的列标题中。
然后,如果id 3的传输是Car,则行标题下的行值为1,其他标题下的行值为0。对于Nan,在所有新生成的标题下,值为0。
答案 0 :(得分:5)
最简单快捷的方法是使用pandas get_dummies
示例:
考虑这个DataFrame $(document).ready(function(){
let list= $('#main-list');
let button = $('#btn');
button.on('click', function(){
let value = $('#text-input').val();
list.append("<li class='dd-list-item'>" + value + "</li>");
});
button.on('click', function(){
let value = $('#text-input').val();
$(".list-menu").append("<li>" + value + "</li>");
});
});
:
df
如果执行此操作:
Transportation
0 car
1 bus
2 plane
3 NaN
你得到输出:
new_df = pd.get_dummies(df,prefix='',prefix_sep='')
print(new_df)
我相信这就是你要找的东西。
答案 1 :(得分:2)
我相信这被称为分类变量的二进制编码:
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'] = 0
df[df['Transportation'] == 'Car']
只需选择数据框中Transportation
列的值为“Car”的所有行。然后,其余部分将值1分配给这些行的Car
列。
此时,Transportation
列中包含其他值的行将具有NaN,我们不希望这样。因此,我们使用类似的技术将值0分配给其余部分。
答案 2 :(得分:0)
使用内置.apply函数的pandas。
在这种情况下,apply函数将把一个函数作为输入。此函数将在列系列的每个成员上运行,并生成一个新列。下面是一个使用lambda函数和inline 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)
给出结果: