【问题标题】:What's the pandas equivalent of R take a subset based on a logical condition?基于逻辑条件的 R 的熊猫等价物是什么?
【发布时间】:2017-04-21 08:28:28
【问题描述】:

我想计算从 r 到 pandas 的等价物:

df$received[df$gender == 'F']

在熊猫中,如果我使用:

df['received'][df['gender'] == 'F']

它不起作用。

或者如果我尝试:

df['received'] & df['gender'] == 'F'

它给了我:unsupported operand type(s) for &: 'float' and 'bool'

【问题讨论】:

  • 对不起,你是在df.loc[df['gender'] == 'F', 'received']之后吗?
  • 这称为逻辑索引

标签: python pandas indexing logical-operators


【解决方案1】:

看来你需要locboolean indexing

df.loc[df['gender'] == 'F', 'received']

示例:

df = pd.DataFrame({'gender':['F','M','F'], 'received':[10,20,50]})
print (df)
  gender  received
0      F        10
1      M        20
2      F        50

print (df.loc[df['gender'] == 'F', 'received'])
0    10
2    50
Name: received, dtype: int64

【讨论】:

  • Hmm.strange...我有 3000 条带有“F”和“M”的记录。其中 1500 条是“F”。上面的解决方案给了我 3000 条记录而不是 1500 条。但在你的例子中它有效。
  • 不,空格。只是df.loc[df['gender'] == 'F', 'received']
  • 数据好像有问题。
  • 数据似乎没问题。使用 R df$received[df$gender == 'F'] 返回 1500 个字段。很奇怪..无论如何,我会接受你的回答,因为它似乎是正确的
猜你喜欢
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多