2017-05-26 62 views
0

大熊貓新手的問題,最快的方法:熊貓:什麼是搜索的大數據幀

我有幾百萬行的數據幀,樣品輸出將是:

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:

我想C1的所有唯一值,C_ID的每個值的列表。所以像:

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

根據「你想要對你的DF的子集做些什麼」,可能會有很多不同的方法。試着解釋你想要達到什麼目標併發布你想要的數據集...... – MaxU

+0

它是非高性能的,有一個非唯一索引,你最好只在'c_id'上進行'group'ing,那麼你可以只需執行'gp.get_group(your_c_id)'返回一個特定的組,但是您需要對'groupby'對象進行一些聚合,以便在編輯時返回一系列/ df – EdChum

回答

1

不明確創建組,但使用熊貓groupby

例如,假定你要找到客戶的平均值,你可以這樣做:

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

等。

您還可以應用(幾乎)任意變換,使用.apply.transform方法(儘管內置類似方法均值,STD,最小值,最大值是更有效,因爲它們會被優化)。

爲了回答您的具體問題,你可以這樣做:

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())) 

(我自己也沒有做過任何基準測試......)

+0

新增解決方案。 – FLab

+0

幾乎是正確的答案。我在找的是: df.groupby('c_id')。c1.unique() 不知道熊貓可以容納一個數組。 – user1871528