我有這個樣本資料
Date = [np.datetime64('2021-07-21'), np.datetime64('2021-07-21'), np.datetime64('2021-07-21'), np.datetime64('2021-07-21'),
np.datetime64('2021-07-21'), np.datetime64('2021-07-21'), np.datetime64('2021-07-22'), np.datetime64('2021-07-22'),
np.datetime64('2021-07-22'),np.datetime64('2021-07-22')]
val = [81.322, 81.322, 81.452, 81.552, 81.44, 81.44, 81.42, 81.43, 81.45, 81.54 ]
data_1 = pd.DataFrame({'Date': Date, 'Value': val})
data_1
Date Value
0 2021-07-21 81.322
1 2021-07-21 81.322
2 2021-07-21 81.452
3 2021-07-21 81.552
4 2021-07-21 81.440
5 2021-07-21 81.440
6 2021-07-22 81.420
7 2021-07-22 81.420
8 2021-07-22 81.450
9 2021-07-22 81.540
我想添加一列,告訴我該值在特定日期是上升還是下降。如果下一個值相同,我會查看之后的值來確定它。由于某種原因,在這種情況下使用 .diff() < 0 不起作用。所以想要的輸出是:
Date Value Change
0 2021-07-21 81.322 Up
1 2021-07-21 81.322 Up
2 2021-07-21 81.452 Up
3 2021-07-21 81.552 Up
4 2021-07-21 81.440 Down
5 2021-07-21 81.440 Down
6 2021-07-22 81.420 Up
7 2021-07-22 81.420 Up
8 2021-07-23 81.450 Up
9 2021-07-23 81.540 Up
請讓我知道我將如何做到這一點。
uj5u.com熱心網友回復:
使用DataFrame.drop_duplicates的洗掉重復,每組試驗差異通過DataFrameGroupBy.diff與Series.lt少像0和最后添加下一個重復的布爾Series.reindex并傳遞到numpy.where:
m = (data_1.drop_duplicates(['Date','Value'])
.groupby('Date')['Value']
.diff()
.lt(0)
.reindex(data_1.index, method='ffill'))
data_1['Change'] = np.where(m, 'Down', 'Up')
print (data_1)
Date Value Change
0 2021-07-21 81.322 Up
1 2021-07-21 81.322 Up
2 2021-07-21 81.452 Up
3 2021-07-21 81.552 Up
4 2021-07-21 81.440 Down
5 2021-07-21 81.440 Down
6 2021-07-22 81.420 Up
7 2021-07-22 81.430 Up
8 2021-07-22 81.450 Up
9 2021-07-22 81.540 Up
uj5u.com熱心網友回復:
這是一種考慮“無變化”的替代方法:
# set UP or DOWN, diff greater zero means UP
data_1['Change'] = np.where(data_1['Value'].diff()>0, "UP", "DOWN")
# set NO_CHANGE where diff is close to zero
m_no_cng = np.isclose(data_1['Value'].diff().fillna(0), 0)
data_1.loc[m_no_cng, 'Change'] = 'NO_CHANGE'
data_1
Date Value Change
0 2021-07-21 81.322 NO_CHANGE
1 2021-07-21 81.322 NO_CHANGE
2 2021-07-21 81.452 UP
3 2021-07-21 81.552 UP
4 2021-07-21 81.440 DOWN
5 2021-07-21 81.440 NO_CHANGE
6 2021-07-22 81.420 DOWN
7 2021-07-22 81.430 UP
8 2021-07-22 81.450 UP
9 2021-07-22 81.540 UP
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355844.html
