У меня есть следующие df
, отсортированные по date
и по 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
Я с нетерпением жду, чтобы сгенерировать новый column
(называемый result
) в df, где, если одно из значений в 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
, однако я уверен, что должен быть более эффективный способ получения желаемого результата.
Спасибо, что прочитали мой пост.