2017-08-17 37 views
1

我想找到一個更好的方式來執行以下過程。避免使用熊貓數據框在Python中進行明確的for-loop

#import packages 
import pandas as pd 

我已經定義了一個熊貓數據框。

# Create dataframe 
data = {'name': ['Jason', 'Jason', 'Tina', 'Tina', 'Tina'], 
     'reports': [4, 24, 31, 2, 3], 
     'coverage': [25, 94, 57, 62, 70]} 
df = pd.DataFrame(data) 

數據幀被創建後,我想添加一個額外的列到數據框。此列包含基於每個名稱的coverage列中的值的排名。

#Add column with ranks based on 'coverage' for every name separately. 
df_end = pd.DataFrame() 
for person_names in df.groupby('name').groups: 
    one_name = df.groupby('name').get_group(person_names) 
    one_name['coverageRank'] = one_name['coverage'].rank() 
    df_end = df_end.append(one_name) 

是否有可能以更簡單的方式實現這個簡單的任務?也許不使用for循環?

回答

2

我想你需要DataFrameGroupBy.rank

df['coverageRank'] = df.groupby('name')['coverage'].rank() 
print (df) 
    coverage name reports coverageRank 
0  25 Jason  4   1.0 
1  94 Jason  24   2.0 
2  57 Tina  31   1.0 
3  62 Tina  2   2.0 
4  70 Tina  3   3.0