pandas DataFrame 中的数据出现在错误的索引位置

在下面的代码中,每个“Person”都有一个对应的“Sales”值,但是当我执行print(compData.max())“Vanessa”时,得到的值是“340”,它在初始的“df”中属于“Amy”


import numpy as np

import pandas as pd


data = {'Company':['GOOG','GOOG','MSFT','MSFT','FB','FB'],

       'Person':['Sam','Charlie','Amy','Vanessa','Carl','Sarah'],

       'Sales':[200,120,340,124,243,350]}

df = pd.DataFrame(data)


compData = df.groupby('Company')


print(df)

print(compData.max())

print(df.loc[3])


这是输出:


  Company   Person  Sales

0    GOOG      Sam    200

1    GOOG  Charlie    120

2    MSFT      Amy    340

3    MSFT  Vanessa    124

4      FB     Carl    243

5      FB    Sarah    350

          Person  Sales

Company                

FB         Sarah    350

GOOG         Sam    200

MSFT     Vanessa    340


Company       MSFT

Person     Vanessa

Sales          124

此外,当我执行print(df.loc[3])“Vanessa”时获得正确的值


子衿沉夜
浏览 83回答 2
2回答

隔江千里

我想为 Pibe_chorro 的答案添加一个替代解决方案,它直接为您提供每家公司的最大销售额和销售人员,包括原始索引:compData.apply(lambda x: x[x.Sales == x.Sales.max()]).reset_index(level=[0])这给你:    Company Person  Sales5        FB  Sarah  3500      GOOG    Sam  2002      MSFT    Amy  340如果需要,您可以使用pd.DataFrame.sort_index()按索引排序compData.apply(lambda x: x[x.Sales == x.Sales.max()]).reset_index(level=[0]).sort_index()结果:    Company Person  Sales0      GOOG    Sam  2002      MSFT    Amy  3405        FB  Sarah  350

达令说

正如 luigigi 指出的那样,groupby.max()返回每列的最大值。要得到你想要的,你可以像这样搜索具有最大值的索引'Sales':idx = df.groupby('Company')['Sales'].transform(max) == df['Sales']print (df[idx])Company Person  Sales0    GOOG    Sam    2002    MSFT    Amy    3405      FB  Sarah    350从这里偷来的也许有更简单的方法,但这就是我发现的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python