注册 登录
编程论坛 Python论坛

请教下大神们

lxping08 发布于 2023-05-18 20:33, 1015 次点击
def get_pos (df):
     ......
  如上面的,定义一个函数,数据类型就一DataFrame,进行向量化运算到len(df)-1也就是最后索引位置,怎么来定义这个位置。
想了很多办法都没法解决,最后是个IF语句来判断的,然后return的。如果对索引循环遍历的话很容易来判断的......
11 回复
#2
sheeboard2023-05-18 21:05
df.tail(1)
df.iloc[-1:]
df.loc[index[-1]]

[此贴子已经被作者于2023-5-18 21:07编辑过]

#3
lxping082023-05-18 21:12
回复 2楼 sheeboard
没有用的版主,我对df进行矢量化操作,返回的值都没改变,很是困惑!循环很容易解决的事
#4
lxping082023-05-18 21:14
回复 2楼 sheeboard
对了如果按你这三种方法这三种表达式怎么表达,Python又当如何解析,很是不解!
#5
lxping082023-05-18 21:19
回复 2楼 sheeboard
对了,我外层还定义了个匿函数调用这个函数的,匿函数是矢量化运算的,而我问的对最后的索引的问题,外层的匿函数自变量与因变量是个映射关系的。
#6
sheeboard2023-05-18 21:35
传个测试文件,把需求详细写一下,如果方便模拟一下结果。
#7
lxping082023-05-18 21:46
回复 6楼 sheeboard
数据量太多了,跟循环的结果相比就差在最后的索引这行上
#8
sheeboard2023-05-18 21:48
不用全部,模拟几个也可以。
#9
lxping082023-05-19 11:30
想了种方法解决了这个问题,但我想应该不是最优的,后面有空再仔细琢磨琢磨搞出个最好的来!
#10
sheeboard2023-05-19 17:28
举例vectorize的用法,参考。
程序代码:

def avg_2_mod(x, y):
   """Calculate the average, unless x is 20
   If the value is 20, return a missing value
   
"""
   if (x == 20):
     return(np.NaN)
   else:
     return (x + y) / 2

print(avg_2_mod(df['a'], df['b'])) #直接用是错的

avg_2_mod_vec = np.vectorize(avg_2_mod)#这是对的
print(avg_2_mod_vec(df['a'], df['b']))

操作有多列作为参数的函数,不要直接用df作为参数。以我的经验一般都会卡在这里。
#11
东海ECS2023-05-19 20:52
以下是引用lxping08在2023-5-18 20:33:11的发言:

 def get_pos (df):
     ......
  如上面的,定义一个函数,数据类型就一DataFrame,进行向量化运算到len(df)-1也就是最后索引位置,怎么来定义这个位置。
想了很多办法都没法解决,最后是个IF语句来判断的,然后return的。如果对索引循环遍历的话很容易来判断的......

应该先    设置index or cloumns        确定索引,    然后    就可以了
#12
sheeboard2023-05-20 13:46
再写一个多列作为函数参数的apply,参考
def myfun(p1,p2):
    return .......#复杂算法

df['c']=df.apply(lambda x: myfun(x['a'],x['b']),axis=1)


[此贴子已经被作者于2023-5-20 13:48编辑过]

1