【发布时间】:2020-07-16 20:17:08
【问题描述】:
我有一个数据框,我想将“关闭”值合并到当天的相应范围内。 (范围 = 高低差)。
我需要5个分位数。 Q1、Q2、M、Q4、Q5。
示例:低 100,高 200,收盘 125 = Q2
这是df:
Low High range close
amin amax
Date
2019-06-20 2918.00 2946.75 115.0 2943.00
2019-06-21 2930.00 2951.50 86.0 2933.25
2019-06-24 2931.00 2944.00 52.0 2934.50
2019-06-25 2902.25 2935.25 132.0 2903.50
2019-06-26 2899.00 2921.25 89.0 2900.25
2019-06-27 2900.00 2918.00 72.0 2913.25
2019-06-28 2913.00 2937.50 98.0 2937.00
2019-07-01 2937.75 2964.00 105.0 2950.50
2019-07-02 2940.75 2962.25 86.0 2962.00
2019-07-03 2957.75 2983.75 104.0 2983.25
2019-07-04 2979.50 2986.00 26.0 2984.50
2019-07-05 2953.50 2986.25 131.0 2972.75
2019-07-08 2955.50 2971.00 62.0 2960.50
2019-07-09 2945.75 2968.50 91.0 2964.50
2019-07-10 2953.50 2989.75 145.0 2988.50
我正在尝试通过循环来完成此操作。数组将被填充,但我无法将值分配给数据框。
low = df.loc[:, ('Low', 'amin')]
def q():
qarray = []
for i in range(len(df)):
if ((df.close[i] - low[i])/0.25)/df.range[i]*100 > 0 and ((df.close[i] - low[i])/0.25)/df.range[i]*100 <= 20:
qarray.append('Q1')
if ((df.close[i] - low[i])/0.25)/df.range[i]*100 > 20 and ((df.close[i] - low[i])/0.25)/df.range[i]*100 <= 40:
qarray.append('Q2')
if ((df.close[i] - low[i])/0.25)/df.range[i]*100 > 40 and ((df.close[i] - low[i])/0.25)/df.range[i]*100 <= 60:
qarray.append('M')
if ((df.close[i] - low[i])/0.25)/df.range[i]*100 > 60 and ((df.close[i] - low[i])/0.25)/df.range[i]*100 <= 80:
qarray.append('Q4')
if ((df.close[i] - low[i])/0.25)/df.range[i]*100 > 80:
qarray.append('Q5')
return qarray
df['q'] = q()
我收到此警告消息:
/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:23: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
如何将值从 qarray 获取到数据框?而且,有没有更 Python 的方式来完成这项任务?
【问题讨论】:
-
你可能想看看
pd.qcut