【问题标题】:Return single cell value from Pandas DataFrame从 Pandas DataFrame 返回单个单元格值
【发布时间】:2016-01-06 18:36:27
【问题描述】:

我想问一个关于此线程的扩展问题:

Select rows from a DataFrame based on values in a column in pandas.

该线程的代码如下:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
               'B': 'one one two three two two one three'.split(),
               'C': np.arange(8), 'D': np.arange(8) * 2})
print(df)
#      A      B  C   D
# 0  foo    one  0   0
# 1  bar    one  1   2
# 2  foo    two  2   4
# 3  bar  three  3   6
# 4  foo    two  4   8
# 5  bar    two  5  10
# 6  foo    one  6  12
# 7  foo  three  7  14

print(df.loc[df['D'] == 14])

这将产生以下结果:

   A    B      C   D
7  foo  three  7  14

根据上面的代码,我怎样才能返回单个“值”而不是一行。也就是说,如何返回值 '7' 或值 'foo' 而不是整行?

【问题讨论】:

  • df.loc[df['D'] == 14][colName] 或 df.loc[df['D'] == 14].values[index]

标签: python pandas


【解决方案1】:

@JonahWilliams 很接近,这是一个有效的:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
               'B': 'one one two three two two one three'.split(),
               'C': np.arange(8), 'D': np.arange(8) * 2})

print(df.loc[df['D'] == 14]['A'].index.values)

>>>[7]

print(df.loc[df['D'] == 14]['A'].values)

>>>['foo']

【讨论】:

  • 太棒了。非常感谢你们。
  • 这些返回长度为 1 的 ndarray,而不是实际值。我的解决方案是 min(df['A'][df['D'] == 14]) 并且这种语法对我来说更合乎逻辑,尽管使用 min() 似乎是一个障碍。不过肯定有更好的方法吗?
  • @smartse - 我通常不使用 min(),而是使用索引 ([0]) 来获取 first 值,如下所示:df[df['D'] == 14].loc[:, 'A'].values[0]。尽管如此,我只希望返回一个值
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2018-03-26
  • 2018-04-22
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多