簡體   English   中英

從pandas中的列中提取單個值

[英]Extracting single value from column in pandas

關於提取單個列值,我有一個簡單的pandas問題

df = DataFrame({'A' : [15,56,23,84], 'B' : [10,20,33,25]})
df

     A    B
0    15   10
1    56   20
2    23   33
3    84   55

x = df[df['A'] == 23]
x

輸出

    A    B
2  23    33

但是,我只想獲得B列中的值,即33.我如何得到它?

我喜歡的方法是Jeff使用loc(通常很好的做法是避免使用副本,特別是如果你以后可以進行分配)。

你可以通過不為布爾掩碼創建一個系列來獲得更多的性能,只是一個numpy數組:

df = pd.DataFrame(np.random.randint(1, 100, 2000).reshape(-1, 2),
                  columns=list('AB'))

In [21]: %timeit df.loc[df.A == 23, 'B']
1000 loops, best of 3: 532 µs per loop

In [22]: %timeit df['B'][df.A == 23]
1000 loops, best of 3: 432 µs per loop

In [23]: %timeit df.loc[df.A.values == 23, 'B']  # preferred
1000 loops, best of 3: 294 µs per loop

In [24]: %timeit df['B'].loc[df.A.values == 23]
1000 loops, best of 3: 197 µs per loop

我不知道為什么這么慢,也許這個用例可以改進......? (我不確定額外的100us花在哪里)...

但是,如果您只對B的而不是它們對應的索引(以及子幀)感興趣,那么直接使用numpy數組要快得多:

In [25]: %timeit df.B.values[df.A.values == 23]
10000 loops, best of 3: 60.3 µs per loop

簡單地說: df['B'][df['A'] == 23]

謝謝@Jeff。

和速度比較:

In [30]:

%timeit df['B'][df['A'] == 23].values
1000 loops, best of 3: 813 µs per loop
In [31]:

%timeit df.loc[df['A'] == 23, 'B']
1000 loops, best of 3: 976 µs per loop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM