微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Python 中散列数据帧的字符串?

如何解决如何在 Python 中散列数据帧的字符串?

我需要以某种方式散列数据框字段的字符串。

我有这个 df:

cars =            ['Tesla','Renault','Tesla','Fiat','Audi','Mercedes','Mercedes']
included_colors = ['red','green',np.nan,'yellow','black','orange']
data = {'Cars': cars,'Included Colors': included_colors}
df = pd.DataFrame (data,columns = ['Cars','Included Colors'])

它看起来像这样:

       Cars Included Colors
0     Tesla             red
1   Renault           green
2     Tesla             NaN
3      Fiat             NaN
4      Audi          yellow
5     Tesla           black
6  Mercedes             NaN
7  Mercedes          orange

我正在尝试以这种方式创建字典或其他形式的数据结构,以在这种情况下有用:

这样我就可以最终让汽车和所有相关的颜色匹配,就像这个例子一样:

Tesla - red,black
Renault - green
Fiat - np.nan
Audi - yellow
Mercedes - orange

我试过这段代码,但我不知道如何继续......:

all_cars = df['Cars'].tolist() # extract all the cars from the df in a list
all_cars = list(dict.fromkeys(all_cars)) # make them unique

dis = {}
for car in all_cars:
    mask = (df['Cars'] == car)
    dis[df.loc[mask,'Cars']] = df.loc[mask,'Included Colors']
    

它不一定是字典,它可以是任何东西,只要匹配所有这些键值即可。我只是认为这种数据结构适合。

如何使这项工作?非常感谢!!!!

解决方法

您可以使用 groupby() 并聚合到 list。然后创建输出字典:

x = df.groupby("Cars",as_index=False).agg(list)
out = dict(zip(x.Cars,x["Included Colors"]))
print(out)

打印:

{'Audi': ['yellow'],'Fiat': [nan],'Mercedes': [nan,'orange'],'Renault': ['green'],'Tesla': ['red',nan,'black']}

感谢@QuangHoang 简短的回答:

print(df.groupby("Cars")['Included Colors'].agg(list).to_dict())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。