在做数据分析时,最后需要的结果所使用的dataframe是基于前几个设定条件dataframe下的结果(即第二个周期为“T+2”的dataframe是基于第一个设定条件周期为"T+1"的dataframe,第三个周期为“T+3"的dataframe又是之前基于设定条件的第二个周期为“T+2”的dataframe直到最后一个dataframe是基于前一个设定条件的dataframe)请问怎么去简化或者使用什么函数可以达到缩减代码的效果,感谢回答或者提供思路,谢谢!
数据表如下(其中一部分)
import pandas as pd
data=pd.read_csv(r'D:\数据\基础数据.csv',encoding='gbk',header=None)
data.columns=['公布数','百分比','偏离度','周期']
T1_x=0.03
T1_y=0.00
condition_T1=data[(data["周期"]=='T+1')&(data["偏离度"]<=T1_x)&(data["偏离度"]>=T1_y)]
df_2=data.loc[list(condition_T1.index-1),'公布数':'周期']
df_T2=df_2[df_2["周期"]=='T+2']
T2_x=0.05
T2_y=0.01
condition_T2=df_T2[(df_T2["偏离度"]<=T2_x)&(df_T2["偏离度"]>=T2_y)]
df_3=data.loc[list(condition_T2.index-1),'公布数':'周期']
df_T3=df_3[df_3["周期"]=='T+3']
T3_x=0.04
T3_y=0.02
condition_T3=df_T3[(df_T3["偏离度"]<=T3_x)&(df_T3["偏离度"]>=T3_y)]
df_4=data.loc[list(condition_T3.index-1),'公布数':'周期']
df_T4=df_4[df_4["周期"]=='T+4']
T4_x=0.02
T4_y=0.00
condition_T4=df_T4[(df_T4["偏离度"]<=T4_x)&(df_T4["偏离度"]>=T4_y)]
df_5=data.loc[list(condition_T4.index-1),'公布数':'周期']
df_T5=df_5[df_5["周期"]=='T+5']
T5_x=0.03
T5_y=0.00
condition_T5=df_T5[(df_T5["偏离度"]<=T5_x)&(df_T5["偏离度"]>=T5_y)]
df_6=data.loc[list(condition_T5.index-1),'公布数':'周期']
df_T6=df_6[df_6["周期"]=='T+6']
T6_z=0.2
mean_T6=df_T6[df_T6["百分比"]>=T6_z]["百分比"].mean()
print(mean_T6)
请问怎么去简化我上面的代码或其他实现结果的思路,感谢!
我感觉写的其实没啥大问题,只是代码复用性提高点就差不多,我写了一个例子,你可以看看,我这没用数据跑,不一定能跑通,但是问题应该不大,你调试一下。
conditions = [
['T+1', 0.03, 0.00],
['T+2', 0.05, 0.01],
['T+3', 0.04, 0.02],
['T+4', 0.02, 0.00],
['T+5', 0.03, 0.00],
]
df = pd.read_csv(r'D:\数据\基础数据.csv', encoding='gbk', header=None)
for i, Tn, Tn_x, Tn_y in enumerate(conditions):
df = df[(df['周期'] == Tn) & (df["偏离度"] <= Tn_x) & (df["偏离度"] >= Tn_y)]
T6_z=0.2
mean_T6 = df[(df["周期"]=='T+6') & df['百分比'] > T6_z].mean()