【问题标题】:Python pandas: Select columns where a specific row satisfies a conditionPython pandas:选择特定行满足条件的列
【发布时间】:2016-09-23 22:33:08
【问题描述】:

我有一个数据框 dfall,其中有一行标记为“row1”,其值为“foo”和“bar”。我只想选择 'row1' 的值为 'foo' 的 dfall 列。

换句话说:

dfall= pd.DataFrame([['bar','foo'],['bla','bli']], columns=['col1','col2'], index=['row1','row2'])

我希望列 'col2' 包含:['foo','bli']

我试过了:

dfall[dfall.loc['row1'].isin(['foo'])]

我得到了错误

IndexingError: Unalignable boolean Series key provided

任何人都可以帮助我执行命令吗?提前致谢!

【问题讨论】:

    标签: python pandas select


    【解决方案1】:

    您可以将您的 df 与标量值进行比较,然后使用 anyaxis=0 并将此布尔掩码传递给 ix

    In [324]:
    df.ix[:,(df == 'foo').any(axis=0)]
    
    Out[324]:
         col2
    row1  foo
    row2  bli
    

    分解以上内容:

    In [325]:
    df == 'foo'
    
    Out[325]:
           col1   col2
    row1  False   True
    row2  False  False
    
    In [326]:
    (df == 'foo').any(axis=0)
    
    Out[326]:
    col1    False
    col2     True
    dtype: bool
    

    【讨论】:

    • 这个答案假定所有列都包含字符串。这对于问题中给出的示例数据框是正确的,但这显然是一个占位符。如果有数字列,df == 'foo' 将失败并返回 TypeError
    • @Schmuddi 我只能回答所陈述的内容,除非 OP 完全描述了问题域,否则此答案满足当前问题
    • 太好了,谢谢!为了使其具体到行,我做了: df.ix[:,(df.loc['row1'] == 'foo')]
    【解决方案2】:

    使用 EdChum 的答案,为了使其具体到行,我做了: df.ix[:,(df.loc['row1'] == 'foo')]

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 2015-09-29
      • 2017-11-15
      • 2011-12-28
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多