我有一个熊猫系列对象列表obj
和一个索引列表idx
。我想要的是一个新系列out
,如果idx
不是obj[idx]
和idx
,则255
中的每一行都包含-1
的值否则。
下面的代码实现了我想要的目标,但是我想知道是否有更好的方法可以做到这一点,特别是无需先创建Python列表然后将其转换为熊猫系列的开销。
>>> import pandas as pd
>>> obj = [pd.Series([1, 2, 3]), pd.Series([4, 5, 6]), pd.Series([7, 8, 9])]
>>> idx = pd.Series([0, 255, 2])
>>> out = pd.Series([obj[idx[row]][row] if idx[row] != 255 else -1 for row in range(len(idx))])
>>> out
0 1
1 -1
2 9
dtype: int64
>>>
谢谢。
答案 0 :(得分:2)
使用reindex
+ lookup
pd.Series(pd.concat(obj,1).reindex(idx).lookup(idx,idx.index)).fillna(-1)
Out[822]:
0 1.0
1 -1.0
2 9.0
dtype: float64