根据条件在df的新列中添加值

詹姆斯·哈德森81

我有以下dfdate排序name

         date     name   valor 
  2  2018-03-01   ACC      75      
  0  2018-03-01   ACE      50     
  0  2018-03-20   ACE      50   
  1  2018-03-01   BBV      20    
  1  2018-03-14   BBV      20
  5  2018-04-16   BBV      58
  6  2018-04-20   BBV     -58

我期待在df中生成一个新的column(称为result),如果其中的值之一与之后的值name相同,则将它们添加到新列中。

所需的输出如下所示:

     date        name    valor  result 
  2  2018-03-01   ACC      75     75
  0  2018-03-01   ACE      50     50
  0  2018-03-20   ACE      50    100 
  1  2018-03-01   BBV      20     20
  1  2018-03-14   BBV      20     40
  5  2018-04-16   BBV      58     98
  6  2018-04-20   BBV     -58     40 

这是我正在尝试的:

for index,row in df.iterrows():
    for i in range(1,len(df)+1):
        if (row['name'][i]==row['name'][i+1]) and ( row['name'][i-1]!=row['name'][i]):
            df["result"]=df["valor"][i]+df["valor"][i+1]
        elif (row['name'][i]==row['name'][i+1]) and (row['name'][i-1]==row['name'][i]):
            df["result"]=df["result"][i]+df["valor"][i+1]

一个indexing error显示输出string index out of range,但是我相信应该有获得期望的输出更有效的方式。

感谢您阅读我的帖子。

pp

您应该groupby.cumsum为此使用pandas迭代行相比,使用随附的矢量化功能通常更有效,更干净。

df['result'] = df.groupby('name')['valor'].cumsum()

print(df)

         date name  valor  result
2  2018-03-01  ACC     75      75
0  2018-03-01  ACE     50      50
0  2018-03-20  ACE     50     100
1  2018-03-01  BBV     20      20
1  2018-03-14  BBV     20      40
5  2018-04-16  BBV     58      98
6  2018-04-20  BBV    -58      40

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章