2017-08-17 4 views
1

以下のプロセスを実行するためのより良い方法を探したいと思います。pandasデータフレームを使用した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) 

データフレームの作成後、データフレームに追加の列を追加します。この列には、各名前のカバレッジ列の値に基づいたランクが別々に含まれています。

#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-loopを使用しないでしょうか?

答えて

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 
関連する問題