我有一个大型熊猫数据框,具有多个列(c1 ... c8)和〜32 mil行。数据框已经按c1排序。我想从共享c1的特定值的行中获取其他列值。使用排序列从熊猫数据框中有效选择行
像
keys = big_df['c1'].unique()
red = np.zeros(len(keys))
for i, key in enumerate(keys):
inds = (big_df['c1'] == key)
v1 = np.array(big_df.loc[inds]['c2'])
v2 = np.array(big_df.loc[inds]['c6'])
red[i] = reduce_fun(v1,v2)
然而,这原来是很慢的,我认为是因为它会检查所有列的匹配准则(即使有可能只有10行了32万的是相关) 。由于big_df是按c1排序的,键只是所有唯一c1的列表,是否有一种快速的方式来获取红色[]数组(即我知道第一行,下一个键是最后一行之后的行前一个键,我知道键的最后一行是与键匹配的最后一行,因为所有后续行都保证不匹配)。
感谢,
伊利亚
编辑:我不知道什么样的顺序是唯一的()方法产生,但我基本上是想为在按键的每个键reduce_fun(),我不”的价值特别注意它们是什么顺序(推测最简单的顺序是顺序c1已经排序)。
Edit2:我稍微重构了代码。基本上,有没有一种有效的构建工程的方法。 big_df ['c1'] ==键占据我数据总时间的75.8%,而根据线剖析器创建v1,v2占21.6%。
大熊猫不提供索引行访问数据库中该术语的含义。顺序访问是唯一的选择,我担心 - 除非您将数据框转换为数组或列表并自行搜索。但是,转换操作将花费与原始选择本身一样多的时间。 – DyZ