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
改行与上一行做运算:
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))
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)
Pandas dataframe.eval()函数用于在调用 DataFrame 实例的上下文中评估表达式。该表达式在 DataFrame 的列上求值。
DataFrame.eval(expr, inplace=False, **kwargs)
参数:
- expr:要计算的表达式字符串。
- inplace:如果表达式包含一个赋值,则是否就地执行操作并更改现有的DataFrame。否则,新
返回DataFrame。 - 返回:ret:ndarray,标量或pandas对象。
实例:
# 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进行投诉反馈,一经查实,立即删除!