【问题标题】:Reverse the Multi label binarizer in pandas反转熊猫中的多标签二值化器
【发布时间】: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

但它并没有给我返回列表。

【问题讨论】:

  • 你是怎么解决这个问题的?

标签: python-3.x sklearn-pandas


【解决方案1】:

【讨论】:

  • 我尝试了mlb.inverse_transform(final_df.loc[:, final_df.columns != 'user_id']),但出现错误提示return [tuple(self.classes_.compress(indicators)) for indicators ValueError: condition must be a 1-d array
  • final_df.loc[:, final_df.columns != 'user_id'] 打印到什么位置?
  • 它给了我一个包含除user_id以外的所有列的数据框@
  • inverse_transform() 期望 array or sparse matrix of shape (n_samples, n_classes). A matrix containing only 1s ands 0s.。所以,只要满足这些条件,就应该不会出错。也许您可以使用这些代码和错误更新问题。
  • 我已经更新了这个问题,如果你能告诉我这个问题的示例解决方案将会很有帮助。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2018-08-04
  • 2017-12-19
  • 1970-01-01
  • 2018-09-28
  • 2018-05-30
  • 2022-09-27
  • 2018-05-01
相关资源
最近更新 更多