[英]Extracting a single value from a Pandas Dataframe based on info in other column
[英]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.