本文介绍: 1.diff()函数df[‘1].diff()结果第一个结果为NAN。2.shift()函数df[‘1’].shift(-1) – df[‘1’] 代表一行减去上一行。结果最后一行值为NAN。Series.shift(periods=1, freq=None, axis=0, fill_value=None)3.pandas对单列、多列进行计算多列进行公式计算https://blog.csdn.net/zwhooo/article/details/79696558…

1.diff()函数df['1].diff()
结果第一个结果为NAN。

2.shift()函数df['1'].shift(-1) - df['1'] 代表下一行减去上一行。结果最后一行值为NAN。

Series.shift(periods=1, freq=None, axis=0, fill_value=None)

shift()函数:默认向下(axis=0)向右移动(axis=1)。
如果想要向上向左移动需要设置参数periods=-1,即向上移动data.shift(periods=-1, axis=0)
向左移动data.shift(periods=-1, axis=1)

3.pandas对单列、多列进行计算
多列进行公式计算
https://blog.csdn.net/zwhooo/article/details/79696558

4.python中上下行、列之间运算

改行与上一行做运算:

df['B'] = math.sqrt(df['A'] * df['A'].shift(periods=-1, axis=0))

报错
在这里插入图片描述
解决办法https://stackoverflow.com/questions/42988348/typeerror-cannot-convert-the-series-to-class-float

代码修改为:

df["B"] = (df["A"] * df["A"].shift(periods=-1, axis=0)).apply(lambda x: math.sqrt(x))  

5.计算累计和
cumsum()函数:求前n元素的累积值

df["B"] = df['A'].cumsum(axis=0) #按行计算

更新:20220320
实际应用:计算体积ws = 1/3 * (h2-h1)/1000 *(a1+a2+sqart(a1*a2))
代码

df = pd.read_excel('./424.xlsx')

#wl_change_2010-1
df["wl_change_2010-1"] = df['WL_change_month'].cumsum(axis=0) #by row

#h2 - h1 = df['WL_change_month']/1000
#ws_change_month

m = (df["predictions_area"] * df["predictions_area"].shift(periods=-1, axis=0)).apply(lambda x: math.sqrt(x))
df['m1'] = m.shift() #sqart(a1*a2)
n = df["predictions_area"] + df["predictions_area"].shift(periods=-1, axis=0)
df['n1'] = n.shift() #sum(a1+a2)

df.eval('ws_change_month = (WL_change_month/1000/3) * (m1 + n1)' , inplace=True)
df['ws_change_month'].fillna(0,inplace=True)
#ws_change_2010-1
df["ws_change_2010-1"] = df['ws_change_month'].cumsum(axis=0) #by row
df['ws_change_2010-1'].fillna(0,inplace=True)

#export data
df_new = pd.DataFrame(df,columns=['ID','Date','YearMonth','WL','Area','predictions_area',
                                  'WL_change_month','wl_change_2010-1',
                                  'ws_change_month','ws_change_2010-1'])

df_new.to_excel(r'./2calculate_ws/424.xlsx',index = False)

更新20220321:
df.eval函数:

Pandas dataframe.eval()函数用于调用 DataFrame 实例上下文评估表达式。该表达式在 DataFrame 的列上求值

DataFrame.eval(expr, inplace=False, **kwargs)

参数

实例

# importing pandas as pd 
import pandas as pd 
  
# Creating the dataframe  
df=pd.DataFrame({"A":[1,5,7,8], 
                 "B":[5,8,4,3], 
                 "C":[10,4,9,3]}) 
# To evaluate the sum over all the columns 
df.eval('D = A + B+C', inplace = True)
df

参考资料https://vimsky.com/examples/usage/python-pandas-dataframe-eval.html

原文地址:https://blog.csdn.net/qq_32649321/article/details/123062925

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45800.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注