在不将列减少为一的情况下反转 HotEncoding

Reversal of HotEncoding without reducing columns to one

我有一个数据集,将每笔交易显示为一行。

例如;

Item_1 Item_2 Item_3
NaN 1 1
1 1 NaN

table 有 611 列,1180 行,因此有 611 个项目和 1180 个事务。

我正在寻找购物篮分析,因此我需要将所有具有“1”的行更改为项目 'name'

例如...

Item_1 Item_2 Item_3
NaN Item_2 Item_3
Item_1 Item_2 NaN

然后我的目标是删除 header 列,让每一行上的每个交易都对齐,没有 NaN

No_header No_header No_header
Item_2 Item_3 NaN
Item_1 Item_2 NaN

试试这个:

items = df.apply(lambda col: col.map({1: col.name})).apply(lambda row: row[~row.isna()].tolist(), axis=1)

输出:

>>> items
0    [Item_2, Item_3]
1    [Item_1, Item_2]
dtype: object

>>> type(items)
pandas.core.series.Series