我在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方法可以实现吗?或者我应该遍历所有值并减去?
答案 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