繁体   English   中英

使用序列获得数据框中的价值

[英]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

使用at一个list理解。

pd.Series([df.at[i, s[i]] for i in s.index], s.index)

a    0
b    4
c    8
dtype: int64

定时

我将其留在此处,但是正如@root所指出的那样,这是不够的

只是列表/数组

在此处输入图片说明

构建系列

在此处输入图片说明

只是编入

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM