Pandas,如何从系列中的所有值中减去第一行值?

时间:2015-12-19 20:15:42

标签: python pandas

我在Pandas中有一个Series对象,我想从系列的所有值中减去一个等于Series的第一个值的数字。

例如:

此:

2015-10-01: 5000
2015-10-02: 5005
2015-10-03: 5012

成为这个:

2015-10-01: 0
2015-10-02: 5
2015-10-03: 12

使用原生Pandas方法可以实现吗?或者我应该遍历所有值并减去?

1 个答案:

答案 0 :(得分:6)

您可以使用iloc[0]访问第一行值,然后从系列的其余部分中减去:

In [5]:
import io
import pandas as pd
t="""2015-10-01 5000
2015-10-02 5005
2015-10-03 5012"""
s = pd.read_csv(io.StringIO(t), index_col=[0], parse_dates=[0], header=None, delim_whitespace=True, squeeze=True)
s

Out[5]:
0
2015-10-01    5000
2015-10-02    5005
2015-10-03    5012
Name: 1, dtype: int64

In [6]:    
s - s.iloc[0]

Out[6]:
0
2015-10-01     0
2015-10-02     5
2015-10-03    12
Name: 1, dtype: int64

可以使用head(1)但您需要索引数组以获取标量值,否则由于索引对齐而导致第2行以后获得NaN

In [9]:
s - s.head(1)[0]

Out[9]:
0
2015-10-01     0
2015-10-02     5
2015-10-03    12
Name: 1, dtype: int64

与之比较:

In [10]:
s - s.head(1)

Out[10]:
0
2015-10-01     0
2015-10-02   NaN
2015-10-03   NaN
Name: 1, dtype: float64