我在Pandas中有一个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方法?或者我应该遍历所有值并减去?
您可以使用第一行值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)
但你需要索引数组以获得标量值,否则你会NaN
因为索引对齐而在第2行开始:
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