解决方案1
一种可能的解决方案,其步骤如下:
-
首先
explode
函数用于将列表中的每个项目转换为行,复制索引值。
-
那么
to_numpy
方法将得到的数据帧转换为numpy数组,以及
.T
转置此数组。
-
这个
crosstab
函数计算一个简单的因子交叉表,在这种情况下,这些因子是分解数据帧的转置列。
-
这个
reset_index
方法用于重置数据帧的索引,将索引转换为名为的列
id
.
-
最后,原始数据帧
df
使用
merge
功能。
df.merge(
pd.crosstab(*df.explode('items').to_numpy().T)
.reset_index(names='id'))
解决方案2
另一种可能的解决方案,其步骤是:
-
首先
爆炸
函数用于将列表中的每个项目转换为行,复制索引值。
-
那么
pivot_table
函数用于根据中的唯一值重塑数据
items
列,汇总每个列的计数
身份证件
对于每一个
item
The
fill_value=0
确保任何缺失的组合都用零填充。
-
这个
rename_axis
方法用于删除列的轴名称。
-
最后,
reset_index
被调用以重置数据帧的索引,将索引转换为列。
-
原始数据帧
df
然后使用
合并
功能。
df.merge(
df.explode('items')
.pivot_table(index='id', columns='items', values='id', aggfunc=len,
fill_value=0)
.rename_axis(None, axis=1).reset_index())
输出:
id items A B C
0 1 [A, B] 1 1 0
1 2 [A, B, C] 1 1 1
2 3 [A, C] 1 0 1