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

2024-10-06 11:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,每个“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”会获得正确的值


Tags: importdffbsamcompanymaxpersongoog
2条回答

我想在Pibe_chorro的回答中添加一个替代解决方案,该解决方案直接为您提供每家公司的最大销售额和销售人员,包括原始指数:

compData.apply(lambda x: x[x.Sales == x.Sales.max()]).reset_index(level=[0])

这给了你:

    Company Person  Sales
5        FB  Sarah  350
0      GOOG    Sam  200
2      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  Sales
0      GOOG    Sam  200
2      MSFT    Amy  340
5        FB  Sarah  350

正如Luiggi指出的,groupby.max()返回每个列的最大值

要获取所需内容,可以在'Sales'中搜索具有最大值的索引,如下所示:

idx = df.groupby('Company')['Sales'].transform(max) == df['Sales']
print (df[idx])

Company Person  Sales
0    GOOG    Sam    200
2    MSFT    Amy    340
5      FB  Sarah    350

here偷来的

也许有更简单的方法,但这就是我发现的

相关问题 更多 >