第十四課:Pandas(2)行情數據處理,DataFrame合並去重以及計算漲跌幅


https://www.bilibili.com/video/BV1Kx411Z7eu?t=750

 

 

 

 

import  pandas as pd
import os
curren_dir=os.path.dirname(os.path.dirname(__file__))
print(curren_dir)
print(os.path.dirname(__file__))
df=pd.read_excel('test20210428_Test.xlsx')
#axis=0或者1 縱向排序還是橫
#f=df.sort_values(by='tradate',ascending=False)
#對數據進行排序,用到了sort_values函數,by參數可以指定根據哪一列數據進行排序,ascending是設置升序和降序(選擇多列或者多行排序要加[],把選擇的行列轉換為列表,排序方式也可以同樣的操作)。
#inplace=True 原則替換
#將NAN值轉換為0

fillna=df.fillna(0)
df.sort_values(by=['tradate'],ascending=True,inplace=True)
df['close11']=df['close'].shift(1)
print(df)
#刪除列
df.drop(['close11'],axis=1,inplace=True)
print(df)
#漲跌 diff的參數只有一個periods,控制偏移位置,即與間隔幾個的差值(可以為負數,默認為1)
df['shift_1']=df['close'].shift(1)
print(df)
df['漲跌']=df['close'].diff(1)#等價
df['漲跌1']=df['close']-df['shift_1']#等價
print(df)
#漲跌幅度
df['漲跌幅']=df['close'].pct_change(-1)
df['漲跌幅1']=(df['close']-df['shift_1'])/df['shift_1']
print(df)
#累加 需要按日期升序
df['volume_cum']=df['volume'].cumsum()
print(df[['tradate','volume','volume_cum']])

#累乘 需要按日期升序
df['volume_prod']=(df['漲跌幅']+1).cumprod()
print(df[['tradate','漲跌幅','volume_prod']],)

 

import pandas as pd
data = [12,5,8,2,8,2,8,2,8,2,8,5,84]
data1 = [12,5,8,56,57,58,59,22,84,24,85,56,87]
df1=pd.DataFrame(data,columns=['num'])
df2=pd.DataFrame(data1,columns=['num'])
# print(data1)
df=pd.DataFrame(data,columns=['num'])
df.sort_values(by=['num'],ascending=1,inplace=True) #1升序排序 0降序
#排序函數
df['cum']=df['num'].cumsum()
df['prod']=df['num'].cumprod()
print(df.sort_values(by=['num','cum'],ascending=[1,0]) )#按多列排序
#多個DataFrame 上下合並操作,append操作
df3=df1.append(df2) #index不連續index是可以重復的,需要得新設置index索引值
df4=df1.append(df2,ignore_index=True)#ignore_index 重新設置index
print(df4)
#對數據進行去重
df4.drop_duplicates(subset=['num'],
keep='first',#first 只保留第一行出現的值,last最后一行的值 ,false一行都不保留
inplace=True
)
print('first22',df4)

 

 

pandas刪除滿足條件所在的行

 df_clear = df.drop(df[df['predict']=='####'].index)

# 多個條件

df_clear = df.drop(df[(df['predict']=='####') | (df['predict']=='車位充足')].index)

 數據合並

res = pd.merge(res, mana_type_size, on=['MNG_ID', 'FND_TYPE'], how='left')
多個條件同時滿足,&,或關系用|
data_mng = df[(df['MNG_ID'] == i['MNG_ID']) & (df['MANA_CODE'] == i['MANA_CODE'])].to_dict('records')

pandas獲取groupby分組里最大值所在的行

https://blog.csdn.net/mappy93/article/details/79319506/
# dg=df.groupby('MNG_ID').apply(lambda t:t[t.RESI_DATE==t.RESI_DATE.max()])
df_gy=df.iloc[df.groupby('MNG_ID').apply(lambda x: x['RESI_DATE'].idxmax())]

1、python中數據框求每列的最大值和最小值

df.min()
df.max()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM