如何用熊猫来做到这一点?
我有这个数据集,它由汽车及其颜色的列表组成(汽车和颜色可能重复):
Color Car
Blue Honda
Green Honda
Green Honda
Blue fiat
Black fiat
....
Yellow nissan
我想为每辆汽车创建一个具有其各自颜色的列(没有与每辆汽车相关的重复颜色)。在该示例中,本田和绿色发生两次,但在本田列中,“绿色”仅出现一次。
类似这样的东西:
+----------------------+------------+----------------------+---------+
| Color | Car | Honda | Fiat |
+----------------------+------------+----------------------+---------+
| Blue | Honda |Blue |Blue
| Green | Honda Green |Black
| Green | Honda |Yellow
| Blue | fiat
| Black | fiat
….
| Yellow | nissan
+-----------------------------------+------------+--------+
我还想知道每辆车有多少种颜色(没有重复)(“可乐”列中与“汽车”列中每个项目相关的唯一项的数量)。
答案 0 :(得分:1)
尝试join
和pd.crosstab
df1 = df.join(
pd.crosstab(df.index, df["Car"], df["Color"], aggfunc="first").fillna(" ")
)
print(df1)
Color Car Honda fiat nissan
0 Blue Honda Blue
1 Green Honda Green
2 Green Honda Green
3 Blue fiat Blue
4 Black fiat Black
5 Yellow nissan Yellow
对于根据您的示例输出的唯一颜色,我们可以创建一个布尔蒙版并将其应用回pd.crosstab
中的values参数
unique_color = np.where(
df.groupby(['Car','Color']).cumcount().ge(1), "", df["Color"]
)
df1 = df.join(pd.crosstab(df.index, df["Car"], unique_color, aggfunc="first").fillna(" ")
)
print(df1)
Color Car Honda fiat nissan
0 Blue Honda Blue
1 Green Honda Green
2 Green Honda
3 Blue fiat Blue
4 Black fiat Black
5 Yellow nissan Yellow