gpt4 book ai didi

python - 使用排序列有效地从 Pandas 数据框中选择行

转载 作者:行者123 更新时间:2023-11-28 20:36:14 26 4
gpt4 key购买 nike

我有一个大型 pandas 数据框,其中包含多列 (c1 ... c8) 和约 3200 万行。数据框已按 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)

然而,我认为这非常慢,因为它会检查整个列的匹配标准(即使 3200 万行中可能只有 10 行是相关的)。由于 big_df 按 c1 排序并且键只是所有唯一 c1 的列表,是否有快速获取 red[] 数组的方法(即我知 Prop 有下一个键的第一行是最后一行之后的行previous key,我知道一个键的最后一行是与该键匹配的最后一行,因为所有后续行都保证不匹配)。

谢谢,

伊利亚

编辑:我不确定 unique() 方法产生的顺序是什么,但我基本上想为键中的每个键设置一个 reduce_fun() 值,我并不特别关心它们的顺序(大概是最简单的顺序)是 c1 已经排序的顺序)。

Edit2:我稍微重组了代码。基本上,是否有构建 inds 的有效方法。 big_df['c1'] == key 在我的数据中占用了总时间的 75.8%,根据 line profiler,在创建 v1 时,v2 占用了 21.6%。

最佳答案

我没有使用列表,而是选择了一个字典来保存 c1 中每个项目的缩减值。

red = {key: reduce_func(frame['c2'].values, frame['c7'].values) 
for key, frame in df.groupby('c1')}

关于python - 使用排序列有效地从 Pandas 数据框中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45558164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com