我有点困在提取一个变量的值的条件下,另一个变量。例如,下面的数据帧:
A B p1 1 p1 2 p3 3 p2 4
当B=3时,我如何获得A的值?每次提取A的值时,都得到一个对象,而不是字符串。
B=3
A
df[df['B']==3]['A'],假设df是你的pandas.DataFrame。
df[df['B']==3]['A']
你可以使用loc获取满足条件的序列,然后使用iloc获取第一个元素:
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'
你可以尝试query,它的输入更少:
query
df.query('B==3')['A']
如果你只想要item本身不带括号,可以使用df[df['B']==3]['A'].values[0]
df[df['B']==3]['A'].values[0]
df.loc[df['B']=='give-specific-value', 'A']```` I have also worked on this clausing and extraction operations for my assignment.
编辑:我在前面描述的是链式索引,在某些情况下可能不起作用。最佳实践是使用loc,但概念是相同的:
df.loc[row, col]
行和上校可以直接指定(例如,'A'或['A', 'B'])或带掩码(例如df['B'] == 3)。使用下面的示例:
df.loc[df['B'] == 3, 'A']
以前的:对我来说,用这些术语来思考更容易,但借用其他答案。你想要的值位于一个数据框架中:
df[*column*][*row*]
其中列和行指向你想要返回的值。在你的例子中,列是'A',对于行你使用掩码:
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]
你可以使用squeeze代替iloc[0]。如果你只有一个值,它看起来更清晰:
squeeze
iloc[0]
df.loc[df['B'] == 3, 'A'].squeeze()
输出:
'p3'