熊猫:搜索大型数据帧的最快方法是什么

时间:2017-05-26 15:04:41

标签: pandas

熊猫新手问题:

我有一个包含数百万行的数据框,示例输出为:

c_id  c1   c2
0     10  100
0     15  110
0     15  112
2     96  120
56    43  42

对于每个customer_id,我想创建一个表做一些事情。最好的方法是什么? 我按c_id对数据帧进行了排序,然后将索引设置为:

df = df.sort('c_id', ascending=False)
df = df.set_index('c_id')

但是一个简单的操作,如:

temp_df = df.loc[:0]

需要永远,这是解决这个问题的最快方法吗? 我认为有条件的set_index可以解决问题。我猜不是。

EDIT1:

我想获取c_id的每个值的c1的所有唯一值的列表。所以像:

df.loc[:0].c1.unique()

1 个答案:

答案 0 :(得分:1)

不要显式创建组,而是使用pandas groupby

例如,假设您要查找客户端的平均值,您可以执行以下操作:

df.groupby(by = df['c_id']).mean()

等等。

您还可以使用.apply.transform方法应用(几乎)任意变换(尽管内置方法如mean,std,min,max更有效,因为它们已经过优化)

要回答您的具体问题,您可以:

df.groupby('c_id').c1.nunique()

给出:

c_id
0     2
20    1
56    1
Name: c1, dtype: int64

请注意,有些问题(thisthis)表明.nunique不是更快的方法,这是另一种方法:

df.groupby('c_id').c1.apply(lambda x: len(x.unique()))

(我自己没有做任何基准测试......)