高效地将一个大型pandas数据框转换为列表

3
我想将一个大的pandas数据帧中的前50个条目转换为列表,对于数据帧中每个索引,列表将具有该值。即使数据帧在该索引处没有任何值,我也希望列表具有值0。例如, pandas数据帧如下所示:
ID      Count
0       20
1       50
2       60
4       90
5       20
.
49      65
.
9999999 60054

将被转换为以下列表,只有数据框的前50个元素是相关的:

[20, 50, 60, 0, 90, 20......,65]

请注意,索引为3的列表中的值为0,因为在pandas数据帧中未找到该ID。


2
“ID”是一列还是索引的名称? - DSM
你的结果列表长度是50还是加上新增索引后的总数? - jpp
2个回答

3
如果我理解正确:
mylist = (df.iloc[:50].set_index('ID')
          .reindex(range(50), fill_value=0)['Count']
          .tolist())

1
df.query('ID < 5').set_index('ID')['Count'].reindex(range(5), fill_value=0).tolist() - piRSquared

2

IIUC:

d = df.query('ID < 5')
m = dict(zip(*map(d.get, d)))
[m.get(i, 0) for i in range(5)]

[20, 50, 60, 0, 90]

我的建议是使用 m = dict(df.query("ID<5").values),而不是映射和压缩。不确定这是否比你的方法更有效。 - Space Impact
1
@SandeepKadapa,.values 是一个方法调用,它将强制所有数据具有相同的 dtype。我的方法保证保留每列的 dtype。还有一些效率相关的问题。如果 dtypes 混合,调用 .values 就很昂贵。如果不是,则非常高效。 - piRSquared

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接