![](/img/trans.png)
[英]Use of if/else in Dataframe.assign() results in ValueError: The truth value of a Series
[英]Use series to get at value in dataframe
我有一个系列和数据框
import pandas as pd
import numpy as np
s = pd.Series(['x', 'y', 'z'], ['a', 'b', 'c'])
df = pd.DataFrame(np.arange(9).reshape(3, 3), s.index, s.values)
我想使用s
选择df
元素。 我想要一系列:
[df.loc['a', 'x'], df.loc['b', 'y'], df.loc['c', 'z']]
您可以使用lookup
:
df.lookup(s.index, s.values)
[0 4 8]
或作为熊猫系列:
pd.Series(df.lookup(s.index, s.values), s.index)
a 0
b 4
c 8
时机
使用比问题大的数据:
from string import ascii_lowercase, ascii_uppercase
s = pd.Series(list(ascii_lowercase), list(ascii_uppercase))
df = pd.DataFrame(np.arange(26**2).reshape(26, 26), s.index, s.values)
产生以下时间:
%timeit pd.Series(df.lookup(s.index, s.values), s.index)
1000 loops, best of 3: 241 μs per loop
%timeit pd.Series([df.at[i, s[i]] for i in s.index], s.index)
1000 loops, best of 3: 770 μs per loop
%timeit pd.Series([df.ix[ind,col] for ind, col in s.iteritems()], s.index)
1000 loops, best of 3: 381 μs per loop
只是编入
In [295]: %timeit pd.Series([df.at[i, s[i]] for i in s.index], s.index)
10000 loops, best of 3: 96.5 µs per loop
In [296]: %timeit pd.Series([ df.ix[ind,col] for ind, col in s.iteritems() ], s.index)
10000 loops, best of 3: 86.3 µs per loop
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.