Python 根据条件在df的新列中添加值
我有以下按日期排序的Python 根据条件在df的新列中添加值,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有以下按日期排序的df和按名称排序的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
df
和按名称排序的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中生成一个新的列
(称为结果
),如果名称
中的一个值与后面的值相同,则将它们一起添加到新列中
所需的输出如下所示:
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]
一个索引错误
输出表明字符串索引超出范围
,但是我相信应该有一种更有效的方法来获得所需的输出
感谢您阅读我的帖子。您应该使用
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