【问题标题】:How to df.loc a cell in a Pandas dataframe with repeating index values?如何在 Pandas 数据框中使用重复索引值对单元格进行 df.loc?
【发布时间】:2017-07-07 13:51:23
【问题描述】:

所以我有一个看起来像这样的大熊猫数据框 (excel):

Teams       Season      Points
Team A        1           5
Team B        1           6
Team C        1           4
Team D        1           5
Team A        2           7
Team B        2           8
Team C        2           3
Team D        2           2

您可以看到所有团队都在索引中重复。我的问题是 - 有没有办法可以“定位”到这张表中的特定单元格

如果我要执行 df.loc["Team A", "Points"] 它会打印两个 Team A 值。有没有办法可以指定我想使用哪个团队 A(第 1 季或第 2 季)?

【问题讨论】:

    标签: python excel pandas indexing


    【解决方案1】:

    DataFrame.query 的解决方案:

    print (df.query('Teams=="Team A" and Season==1')['Points'])
    Teams
    Team A    5
    Name: Points, dtype: int64
    

    print (df.query('Teams=="Team A" & Season==1')['Points'])
    Teams
    Team A    5
    Name: Points, dtype: int64
    

    如果需要标量输出:

    #unutbu solution from deleted answer
    print (df.query('Teams=="Team A" & Season==1')['Points'].item())
    5
    
    print (df.query('Teams=="Team A" & Season==1')['Points'][0])
    5
    print (df.query('Teams=="Team A" & Season==1')['Points'].values[0])
    5
    

    创建另一个可能的解决方案 MultiIndex - 将列 Season 添加到 index by set_index 然后选择:

    df = df.set_index('Season', append=True)
    print (df)
                   Points
    Teams  Season        
    Team A 1            5
    Team B 1            6
    Team C 1            4
    Team D 1            5
    Team A 2            7
    Team B 2            8
    Team C 2            3
    Team D 2            2
    
    print (df.loc[('Team A',1)])
    Points    5
    Name: (Team A, 1), dtype: int64
    

    【讨论】:

    • 谢谢,MultiIndex 正是我所需要的。但是,如果我有除 Points 之外的更多列,并且我想指定从哪一列中提取?我试过的示例:print (df.loc([(player_or_team_name, rand_season)], [stat_name])) 我得到 TypeError: __call__() 需要 1 到 2 个位置参数,但给出了 3 个我想我可能只是格式、括号/括号不合适?
    • df.query 也给了我一个没有价值的空系列? :Series([], Name: Caps, dtype: object)
    • 您可以查看文档 - pandas.pydata.org/pandas-docs/stable/… 以选择多索引。
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2017-08-19
    • 2020-04-12
    • 2019-02-16
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多