第十四课: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()

原文地址:https://www.cnblogs.com/gina11/p/14736158.html