2016-04-28 157 views
1
集團

中創建有序遞增值列我有一個數據幀「DF」即包括:大熊貓

col1 = datetime[64] 
col2 = object 
col3 = object 
col4 = object 

我想排序「COL1」的數據幀。然後我想按'col2'分組。最後,我想在'col2'的分組內創建一個序數值(1,2,3),並按'col1'排序。如果'col2'分組有4行,那麼這些行的值將是[1,2,3,4],在這個新列中。

我知道有一個「秩()」中的熊貓,我可以使用

df['newcol'] = df.groupby(['col2'])['col1'].rank() 

但是,這並沒有給我原來的數據框柱序數值,像數[1,2, 3]內只有分組?

+0

嘗試'df ['newcol'] = df.groupby(['col2'])。transform(lambda g:g ['col1']。rank())' –

回答

1

你想達到這樣的目的嗎?沒有樣本數據和期望的結果很難說清楚。

random.seed(0) 
df = pd.DataFrame({col: [random.choice(list('abc')) for i in range(10)] for col in list('ABC')}) 
df['timestamp'] = pd.date_range('2016-1-1', periods=len(df)) 

df.sort_values('timestamp', inplace=True) 
df['rank'] = \ 
    df.groupby('A')['B'].transform(lambda group: group.astype('category').cat.codes + 1) 

>>> df 
    A B C timestamp rank 
0 c c a 2016-01-01 2 
1 c b c 2016-01-02 1 
2 b a c 2016-01-03 1 
3 a c c 2016-01-04 1 
4 b b b 2016-01-05 2 
5 b a a 2016-01-06 1 
6 c c b 2016-01-07 2 
7 a c b 2016-01-08 1 
8 b c c 2016-01-09 3 
9 b c c 2016-01-10 3 
0

試試這個:

>> df.sort_values(by='col1').groupby('col2') 

這將col1通過col2第一排序您的DF,然後組。結果將是一個GroupBy對象。

如果你也想擁有排在小組中的每一個數字,那麼你可以試試這個:

>> grouped = df.sort_values(by='col1').groupby('col2') 
>> grouped.count() 

我希望這有助於!