转换 pandas 数据框以用于MultiLabelBinarizer [英] Transform pandas Data Frame to use for MultiLabelBinarizer
本文介绍了转换 pandas 数据框以用于MultiLabelBinarizer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题是:如何转换这样的数据框以最终在scikit的MulitLabelBinarizer中使用:
My question is: How can I transform a Data Frame like this to eventually use it in scikit's MulitLabelBinarizer:
d1 = {'ID':[1,2,3,4], 'km':[80,90,90,100], 'weight':[10,20,20,30], 'label':['A','B','C','D','E']}
df1 = pd.DataFrame(data=d1)
df1
ID km weight label
0 1 80 10 A
1 2 90 20 B
2 2 90 20 C
3 4 100 30 D
它应该像这样调谐:
d2 ={'km':[80,90,100], 'weight':[10,20,30], 'label':['A',('B','C'),'D']}
df2 = pd.DataFrame(data=d2)
df2
km weight label
0 80 10 A
1 90 20 (B, C)
2 100 30 D
所以我可以在MultiLabelBinarizer中正确使用数据:
So I can juse the data properly in the MultiLabelBinarizer:
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
mlb.fit(df2['label'])
mlb.transform(df2['label'])
array([[1, 0, 0, 0],
[0, 1, 1, 0],
[0, 0, 0, 1]])
注意:原始数据有超过100万行。
Note: the raw data has more than 1 million rows.
推荐答案
我认为您需要这样做:
d1 = {'ID':[1,2,3,4], 'km':[80,90,90,100], 'weight':[10,20,20,30], 'label':['A','B','C','D']}
df1 = pd.DataFrame(data=d1)
#Groupby and get tuple, like you need
df2 = pd.DataFrame(df1.groupby(['km','weight'])['label'].apply(lambda x: tuple(x.values)))
df2.reset_index(inplace=True)
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
mlb.fit(df2['label'])
mlb.transform(df2['label'])
这篇关于转换 pandas 数据框以用于MultiLabelBinarizer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文