【发布时间】:2019-09-09 20:31:28
【问题描述】:
我有熊猫数据框
import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
# load sample data
df = pd.DataFrame( {'user_id':['1','1','2','2','2','3'], 'fruits':['banana','orange','orange','apple','banana','mango']})
我使用以下代码为每个用户收集所有水果 -
# collect fruits for each user
transformed_df= df.groupby('user_id').agg({'fruits':lambda x: list(x)}).reset_index()
print(transformed_df)
user_id fruits
0 1 [banana, orange]
1 2 [orange, apple, banana]
2 3 [mango]
一旦我得到这个列表,我会执行多标签二值化操作来将这个列表转换为 1 或 0
# perform MultiLabelBinarizer
final_df = transformed_df.join(pd.DataFrame(mlb.fit_transform(transformed_df.pop('fruits')),columns=mlb.classes_,index=transformed_df.index))
print(final_df)
user_id apple banana mango orange
0 1 0 1 0 1
1 2 1 1 0 1
2 3 0 0 1 0
现在,我有一个要求,给我的输入数据框是 final_df,我需要取回包含每个用户的 fruits 列表的 transformed_df。
鉴于我有 final_df 作为输入数据框,我怎样才能得到这个 transformed_df?
我正在努力解决这个问题
# Trying to get this working
inverse_df = final_df.join(pd.DataFrame(mlb.inverse_transform(final_df.loc[:, final_df.columns != 'user_id'].as_matrix())))
inverse_df
user_id apple banana mango orange 0 1 2
0 1 0 1 0 1 banana orange None
1 2 1 1 0 1 apple banana orange
2 3 0 0 1 0 mango None None
但它并没有给我返回列表。
【问题讨论】:
-
你是怎么解决这个问题的?