【问题标题】:Python Pandas - Logical indexing dataframe with multiple indexes based on single indexPython Pandas - 基于单个索引的具有多个索引的逻辑索引数据框
【发布时间】:2015-06-06 06:42:36
【问题描述】:

我对 Pandas 还是很陌生,但我已经搜索了很多,但找不到我要找的东西。

所以这是我的问题:

我有两个数据框 - 一个有多个索引,另一个只有一个索引

df1=

               value1  value2
ind1 ind2
a      1          1.1     7.1
b      2          2.0     8.0
c      3          3.0     9.0
a      4          4.0    10.0
b      5          5.0    11.0
c      6          6.0    12.0


df2=

           value1  value2
ind1
a           8.0     7.0
b           9.0     8.0
c           3.0     9.0
d           11.0   10.0
e           12.0    11.0
f           1.0    12.0

我想根据 df2 索引来自 df1 的数据,其中 value1 > value2

df2['value1'] > df2['value2']

我知道我可以从 df2 获取数据

df2.loc[df2['value1'] > df2['value2']]

但是我如何从 df1 获取数据?我试过了:

df1.loc[df2['value1'] > df2['value2']]

但它失败了

*** IndexingError: Unalignable boolean Series key provided

任何建议将不胜感激,谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    从 df2 获取索引,然后在这些索引上选择 df1:

    indices = df2.loc[df2['value1'] > df2['value2']]
    >>>indices
    Index([u'b', u'd', u'e'], dtype='object')
    >>>df1.ix[indices]
    
    ind1 ind2   val1    val2
    b    2      2.0     8.0
    b    5      5.0     11.0
    

    【讨论】:

    • 太棒了,谢谢你 - 这很有效。抱歉,还有一个问题 - 我现在正在尝试用 df1.ix[indices]['value1'] = 0 更新它,这似乎没有更新任何东西。有什么建议?谢谢!
    • 哦,没关系,想通了!对任何感兴趣的人使用 df1.ix[indices, 'value1'] = 0 。感谢您的帮助
    • 当然,一旦你学会了如何在 pandas 中使用 ix、loc 和 iloc,你几乎可以做任何事情
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2016-10-30
    • 1970-01-01
    • 2021-05-16
    • 2015-03-10
    • 2013-05-20
    • 1970-01-01
    • 2019-02-16
    相关资源
    最近更新 更多