【问题标题】:get subsection of df based on multiple conditions根据多个条件获取 df 的小节
【发布时间】:2016-04-16 01:25:10
【问题描述】:

我正在尝试根据多个条件从 df 中提取行,在选择任何行之前必须满足所有条件,否则什么也没有。

我的朋友

columns = ['is_net', 'is_pct', 'is_mean', 'is_wgted', 'is_sum']
index = ['a','b','c','d']
data = [['True','True','False','False', 'False'],
       ['True','True','True','False', 'False'],
       ['True','True','False','False', 'True'],
       ['True','True','False','True', 'False']]

df = pd.DataFrame(columns=columns, index=index, data=data)
df

    is_net  is_pct  is_mean is_wgted    is_sum
a   True    True    False   False   False
b   True    True    True    False   False
c   True    True    False   False   True
d   True    True    False   True    False

我的条件必须是这种格式:

conditions = {'is_net': 'True', 
              'is_pct': 'True', 
              'is_mean': 'False', 
              'is_wgted': 'True', 
              'is_sum': 'False'}

预期输出:

    is_net  is_pct  is_mean is_wgted    is_sum
d   True    True    False   True    False

【问题讨论】:

  • 你是在问如何组合条件(例如df[df.is_net & df.is_pct & ...]?或者你是在问如何找到所有任意数量的布尔列都为真的行?
  • 所有布尔列的任意数量都与“条件”变量匹配
  • 旁白:由于布尔值是原生支持的类型,使用 string True 和 False 会导致混淆,因为True != 'True'
  • 是的,我同意,我必须编辑这个。

标签: python pandas dataframe multiple-conditions


【解决方案1】:

我认为诀窍是将conditions 变成一个系列:

>>> pd.Series(conditions)
is_mean     False
is_net       True
is_pct       True
is_sum      False
is_wgted     True
dtype: object
>>> (df == pd.Series(conditions))
  is_mean is_net is_pct is_sum is_wgted
a    True   True   True   True    False
b   False   True   True   True    False
c    True   True   True  False    False
d    True   True   True   True     True
>>> (df == pd.Series(conditions)).all(axis=1)
a    False
b    False
c    False
d     True
dtype: bool
>>> df[(df == pd.Series(conditions)).all(axis=1)]
  is_net is_pct is_mean is_wgted is_sum
d   True   True   False     True  False

【讨论】:

  • 这是个好主意。但如果不是所有条件都满足会怎样?
  • 我不确定你在问什么。如果不是所有条件都满足,例如abc,则all 方法为该索引返回 False。
  • 忽略我,我是一个网络。再次感谢!
猜你喜欢
  • 2021-12-11
  • 2023-03-10
  • 2021-07-25
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多