| IDX|一|B|_目标|
| --|--|--|--|
| 1 |[a、B、c]|[x,y,z]|......这是什么?|
| 2 |[w,x,y]|[a、B、d]|......这是什么?|
这基本上是我的csv文件的结构,我已经用pd.read_csv将其加载到python中。列A和B包含分类变量列表,a,B,c等。一行不能有重复的变量。
我希望变量在A中的示例被编码为1,而在B中的示例应该被编码为-1。当一行在A或B中都不包含特定类别时,该变量应该被编码为0。
我基本上需要将其转换为这个指标表格式:
| IDX|一|B| C| D|......这是什么?|
| --|--|--|--|--|--|
| 1 | 1 | 1 | 1 | 0 |......这是什么?|
| 2 |-1个|-1个| 0 |-1个|......这是什么?|
有250 k行和25 k唯一类别(因此列也是如此)。
下面是我认为应该做的技巧代码,但它不会在任何合理的时间框架内运行。
sparse_A = pd.get_dummies(data["A"].explode(), sparse=True).groupby(level=0).sum()
sparse_B = pd.get_dummies(data["B"].explode(), sparse=True).groupby(level=0).sum()*-1
indicator_df = sparse_A + sparse_B
字符串
有没有更有效的方法来执行这个操作?
4条答案
按热度按时间avkwfej41#
我们可以在没有
.explode()
的情况下完成它;也许这将有助于解决您的内存问题:字符串
然后又道:
型
dkqlctbz2#
如果所有列表都有相同数量的值,则可以使用两个
crosstab
:字符串
输出量:
型
rpppsulh3#
您可以尝试:
字符串
印刷品:
型
快速基准:
型
印刷品:
型
cngwdvgl4#
最后,我选择了一种方法,我在列上进行排序,一次排序一列。速度慢,但内存效率高,因为我可以在继续排序下一列之前将每列更改为稀疏dtype(也许有更好的方法?我不确定)
字符串