2016-04-28 111 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() 

我希望这有助于!