【发布时间】:2021-07-13 22:19:13
【问题描述】:
这个帖子似乎没有涵盖我经常遇到的情况。
Return single cell value from Pandas DataFrame
如何使用一组列条件作为键返回单个值,而不是系列或数据框?这似乎是一个普遍的需求。假设您有一个信息数据库,您需要从中提取问题的答案,但您需要一个答案,而不是一系列可能的答案。我的方法似乎“做作”——不是 Pythonic?而且可能由于技术原因不好。
import pandas as pd
d = {'A': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'B': [1, 2, 3, 1, 2, 3, 1, 2, 3], 'C': [1, 3, 5,
2, 9, 7, 4, 3, 2]}
df = pd.DataFrame(data=d)
df 看起来像:
A B C
0 1 1 1
1 1 2 3
2 1 3 5
3 2 1 2
4 2 2 9
5 2 3 7
6 3 1 4
7 3 2 3
8 3 3 2
如何获取A == 1和B == 3的C列中的值?在我的情况下,它总是唯一的,但我可以看到这是不能假设的,所以这个方法返回一个系列:
df[(df['A'] == 1) & (df['B'] == 3)]['C']
我不想要一个系列。那么如何获取单个值,而不是一行或一个元素的系列或列表?
我的方法:
df[(df['A'] == 1) & (df['B'] == 3)]['C'].tolist()[0]
在 Pandas 库中,DataFrame.at 似乎是要走的路,但这种方法看起来并不好,但我想知道它在技术上是否更好:
df.at[df.loc[(df['A'] == 1) & (df['B'] == 3)].index[0], 'C']
那么,在您看来,使用多列条件在数据框中查找值并返回单个值(不是列表或系列)的最佳方法是什么?
【问题讨论】:
-
找到了 pd.DataFrame.squeeze 函数供以后参考。可能有用。 pandas.pydata.org/docs/reference/api/…