我想找到一个更好的方法来执行以下过程。
#import packages
import pandas as pd
我已经定义了一个pandas数据帧。
# 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-loop?
答案 0 :(得分: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