【问题标题】:extract column value based on another column pandas dataframe根据另一列熊猫数据框提取列值
【发布时间】:2016-08-09 14:27:54
【问题描述】:

我有点卡在以另一个变量为条件提取一个变量的值。例如以下数据框:

A  B
p1 1
p1 2
p3 3
p2 4

B=3 时如何获取A 的值?每次我提取A 的值时,我都会得到一个对象,而不是字符串。

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

您可以使用loc 获取满足您条件的系列,然后使用iloc 获取第一个元素:

In [2]: df
Out[2]:
    A  B
0  p1  1
1  p1  2
2  p3  3
3  p2  4

In [3]: df.loc[df['B'] == 3, 'A']
Out[3]:
2    p3
Name: A, dtype: object

In [4]: df.loc[df['B'] == 3, 'A'].iloc[0]
Out[4]: 'p3'

【讨论】:

  • 感谢您的帮助。 df.loc[df['B'] == 3, 'A'].item() 也适合我。
  • 如果数据框在 B 列中有多个“3”条目,它会选择哪一个?
  • df.loc[df["Condition_Column"] == 0, ("Column_1", "Column_2, "Column_3", "Column_4")] 适用于我。此示例用于选择多个列。它们应该在元组中。
  • 如果 df.loc[df['B'] == 300, 'A'].iloc[0] 表示输出是什么?
  • .item() 显然已被弃用并将被删除。还有另一种方法可以做到这一点吗?我对使用 .loc 方法返回的列名或数据类型不感兴趣。
【解决方案2】:

你可以试试query,打字少:

df.query('B==3')['A']

【讨论】:

  • 查询很有趣,因为我们也可以添加更复杂的子句
  • 恕我直言,这是最好的答案。
  • @NLR 这取决于。 query 创建一个新的DataFrame,然后切片['A'] 创建另一个DataFrame。对于大型案例,希望避免不必要的中间对象。
【解决方案3】:

df[df['B']==3]['A'],假设 df 是你的 pandas.DataFrame。

【讨论】:

  • 您能否提供一个链接,具体说明此方法在 pandas 官方文档中的描述?
  • 我的意思是][ 部分。
  • @vasili111 检查熊猫过滤器
  • 最后添加一个.item()。
【解决方案4】:

如果您只想要不带括号的项目本身,请使用 df[df['B']==3]['A'].values[0]

【讨论】:

  • 您能否提供一个链接,在 pandas 官方文档中详细描述了此方法?我的意思是][ 部分。
  • 它确实返回带有 [] 的结果
  • 您仍然需要将[0] 放在末尾才能访问该值。
【解决方案5】:

已编辑:我在下面的“以前”下描述的是链式索引,在某些情况下可能不起作用。最好的做法是使用loc,但概念是一样的:

df.loc[row, col]

rowcol 可以直接指定(例如,'A' 或 ['A', 'B'])或使用掩码(例如 df[' B'] == 3)。使用下面的例子:

df.loc[df['B'] == 3, 'A']

上一个:我用这些术语更容易思考,但借鉴了其他答案。您想要的值位于数据框中:

df[*column*][*row*]

其中 columnrow 指向您要返回的值。对于您的示例,column 是“A”,对于 row,您使用掩码:

df['B'] == 3

要从系列中获取第一个匹配值,有几个选项:

df['A'][df['B'] == 3].values[0]
df['A'][df['B'] == 3].iloc[0]
df['A'][df['B'] == 3].to_numpy()[0]

【讨论】:

    【解决方案6】:
    male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()
    

    我还为我的作业处理了这个子句和提取操作。

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 2021-06-25
      • 2017-10-14
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多