熊猫新手问题:
我有一个包含数百万行的数据框,示例输出为:
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()
答案 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
请注意,有些问题(this和this)表明.nunique不是更快的方法,这是另一种方法:
df.groupby('c_id').c1.apply(lambda x: len(x.unique()))
(我自己没有做任何基准测试......)