我有一个由数百列和数百万行组成的熊猫数据框。我需要为每行的不同列索引处的某些单元格分配值。
我在熊猫中尝试过循环和.apply方法,但它们都不够快。所以我需要知道一种矢量化的方式来做到这一点。
首先,我有一系列的熊猫清单。看起来像这样。
0 [116, 117, 118, 120, 121, 122, 125, 126]
1 [116, 117, 118, 120, 121, 122, 123, 124, 125]
...
您可以看到,在本系列中,每个项目都是一个由索引组成的列表。该系列中的这些项目并不相同,这意味着如果我将这些索引用作列索引来分配值,则每行将在不同位置分配单元格。这就是我想要的。
要分配给单元格的值也存储在熊猫的一系列列表中,如下所示:
0 [value1, value2, value3, value4, value5, value6, value7]
1 [value1,value2,value3,value4,value5,value6,value7,value8,value9]
...
如您所见,值列表的长度与索引列表的长度一致。包含值列表和单元格需要填充的系列位于同一只熊猫数据框中。
所以我尝试了这个:
def fill_rows(row, *args):
row[row[index_column_index]] = row[value_column_index]
df.apply(fill_rows)
这有效,但是很慢。 (不如我预期的快几百万行)
所以我想知道是否有一种方法可以做到这一点:
df[array_of_index_lists] = df[value_column_index]
这是一种矢量化的方法,用于索引每一行的不同单元格,并使用另一列中的相应值为其分配值。非常感谢。