获取在按数据框分组的多索引上具有最大列值的索引
Get index that has max column value on a multi index groupped by dataframe
我正在使用 pandas 处理数据集,我想获得在比赛中取得更多胜利的属性。我能够使用 groupby 函数创建数据框。
例如,对于可能有 3 个以上替代项的属性“surface”,我有这个数据框:
现在我想要一个像这样的输出数据框:
fullname best_surface
Zuzana Zlochova Hard
Zuzanna Bednarz Clay
....
我设法通过对只能有两个值的属性进行一些合并来解决这个问题,但它不适用于可以有 3 个或更多值的属性。
数据集很大,所以我必须使用 pandas 操作,我不能使用迭代器。
谢谢
使用DataFrameGroupBy.idxmax
for indices by first maximal by column hasWon
, select rows and convert MultiIndex
to DataFrame
by MultiIndex.to_frame
:
df = df.loc[df.groupby(level='fullname')['hasWon'].idxmax()].index.to_frame(index=False)
print (df)
fullname surface
0 Zuzana Zlochova Hard
1 Zuzanna Bednarz Clay
2 Zuzanna Szczepanska Clay
3 Zvonimir Oreskovic Hard
或者在构造函数中将元组转换为DataFrame
:
df = pd.DataFrame(df.groupby('fullname')['hasWon'].idxmax().tolist(),
columns=['fullname','best_surface'])
print (df)
fullname best_surface
0 Zuzana Zlochova Hard
1 Zuzanna Bednarz Clay
2 Zuzanna Szczepanska Clay
3 Zvonimir Oreskovic Hard
我正在使用 pandas 处理数据集,我想获得在比赛中取得更多胜利的属性。我能够使用 groupby 函数创建数据框。 例如,对于可能有 3 个以上替代项的属性“surface”,我有这个数据框:
现在我想要一个像这样的输出数据框:
fullname best_surface
Zuzana Zlochova Hard
Zuzanna Bednarz Clay
....
我设法通过对只能有两个值的属性进行一些合并来解决这个问题,但它不适用于可以有 3 个或更多值的属性。 数据集很大,所以我必须使用 pandas 操作,我不能使用迭代器。
谢谢
使用DataFrameGroupBy.idxmax
for indices by first maximal by column hasWon
, select rows and convert MultiIndex
to DataFrame
by MultiIndex.to_frame
:
df = df.loc[df.groupby(level='fullname')['hasWon'].idxmax()].index.to_frame(index=False)
print (df)
fullname surface
0 Zuzana Zlochova Hard
1 Zuzanna Bednarz Clay
2 Zuzanna Szczepanska Clay
3 Zvonimir Oreskovic Hard
或者在构造函数中将元组转换为DataFrame
:
df = pd.DataFrame(df.groupby('fullname')['hasWon'].idxmax().tolist(),
columns=['fullname','best_surface'])
print (df)
fullname best_surface
0 Zuzana Zlochova Hard
1 Zuzanna Bednarz Clay
2 Zuzanna Szczepanska Clay
3 Zvonimir Oreskovic Hard