我有一个基于机场的pandas数据帧,它有一个包含值的类型列:small_airport,medium _ airport,大型航空端口
我需要将这些值提取到3个不同的列中,我有点卡住了。我尝试过各种排列:
data['small_airport'] = data[['type'] == 'small_airport']
但我什么都做不了。我在这里看到了几篇类似的帖子,但还没有完全理解答案,无法实施建议。如果我重复了问题,我很抱歉。
任何建议都将不胜感激!编辑:数据样本为:
id, type, name
652, small_airport, Total Rf
345, heliport, Aero B
654, large_airport, Lowell field
这是一个大学项目,简报指出:"类型"列包含机场类型的信息。将其提取到一个新列中,每个列对应机场类别
我希望这能有所帮助!
您可以使用data.groupby('type')
然后进行聚合(请参阅此处((这对大多数目的最有用(,也可以使用data.pivot(index=..., columns='type', values=...)
(请参阅这里((这是对您的问题的更准确的回答(。
使用pd.crosstab
:
out = pd.concat([df, pd.crosstab(df.index, df['type'])], axis=1)
print(out)
# Output
name type large_airport medium_airport small_airport
0 A small_airport 0 0 1
1 B small_airport 0 0 1
2 C large_airport 1 0 0
3 D medium_airport 0 1 0
注意:如果您喜欢布尔值,请使用pd.crosstab(...).astype(bool)
。
设置:
data = {
'name': ['A', 'B', 'C', 'D'],
'type': ['small_airport', 'small_airport', 'large_airport', 'medium_airport']
}
df = pd.DataFrame(df)