如何在熊猫数据框中设置最小值和最大值?

时间:2018-10-08 12:32:52

标签: python pandas

我有以下代码:

from scipy.signal import argrelextrema

test = pd.DataFrame()
test['price'] = perf.price
test = test.dropna()
# reindex so index is int count
test.reset_index(inplace=True)

# get the peaks and valleys for the data set
peaks = argrelextrema(test.price.values, np.greater)
valleys = argrelextrema(test.price.values, np.less)

perf.price是一个数据框列。 我基本上想在测试数据帧中添加两个新列:last_peak和last_valley,其价格为最后一个峰值或谷值,但我无法使其正常工作。

argrelextrema返回一个numpy数组,因此我已转换为pd.Series但

test.index.isin( peakSeries )

给出奇怪的结果

1 个答案:

答案 0 :(得分:0)

尝试一下:

示例数据: perf = pd.DataFrame({'price':[100.1, 1.1, 3.5, 400, 3.1, 651, 39]})

添加的代码:

test['peaks'] = False
test['valleys'] = False
test['peaks'].loc[peaks] = True
test['valleys'].loc[valleys] = True

示例输出:

   index  price  peaks  valleys
0      0  100.1  False    False
1      1    1.1  False     True
2      2    3.5  False    False
3      3  400.0   True    False
4      4    3.1  False     True
5      5  651.0   True    False
6      6   39.0  False    False

如果要添加最后一个峰和谷的列:

test['last_peak'] = test.loc[peaks[0][-1]].price
test['last_valley'] = test.loc[valleys[0][-1]].price

输出:

   index  price  peaks  valleys  last_peak  last_valley
0      0  100.1  False    False      651.0          3.1
1      1    1.1  False     True      651.0          3.1
2      2    3.5  False    False      651.0          3.1
3      3  400.0   True    False      651.0          3.1
4      4    3.1  False     True      651.0          3.1
5      5  651.0   True    False      651.0          3.1
6      6   39.0  False    False      651.0          3.1

是您想要的吗?