У меня проблема со столбцом Arrays в DataFrame пример: у меня есть эти данные
CustomerNumber ArraysDate
1 [ 1 4 13 ]
2 [ 3 ]
3 [ 0 ]
4 [ 2 60 30 40]
Я хочу, чтобы caculator суммировал элемент в ArrayDate я создаю функцию
def Caculator(n,x,value):
v = 0
for i in n-x:
v = sum(value)
return v
А также
s['Sum'] = Caculator(s['n'],1,s['ArraysDate'])
n - это количество элементов столбца ArraysDate. И я хочу калькулятор
Sum = t1 + t2 +....+t_n-x
И ожидаем результат:
CustomerNumber ArraysDate Sum
1 [ 1 4 13 ] 5
2 [ 3 ] 0
3 [ 0 ] 0
4 [ 2 60 30 40] 92
Пожалуйста, опубликуйте ожидаемый результат
@Chris, я добавил Ожидаемый результат
Конечно @Arunoprayoch
@TrinhPham: Пожалуйста, не используйте фрагмент для форматирования кода, а просто пример кода. Фрагмент предназначен для кода javascript, который можно напрямую выполнить в браузере.
IIUC вы можете использовать:
df['Sum']=df.ArraysDate.apply(lambda x: sum(x[:len(x)-1]))
#or df.ArraysDate.str[:-1].apply(sum)
print(df)
CustomerNumber ArraysDate Sum
0 1 [1, 4, 13] 5
1 2 [3] 0
2 3 [0] 0
3 4 [2, 60, 30, 40] 92
ДФ: df = pd.DataFrame({'CustomerNumber': [1, 2, 3, 4], 'ArraysDate': [[1,4,13],[3],[0],[2,60,30,40]]})
Это хорошо, но я хочу добавить столбец sum_1 = t_n-x+1+..+tn. не могли бы вы подсказать, как рассчитать sum_1
Да, это означает сумму элементов, за исключением тех, которые рассчитаны в «сумме».
Да, но с CustomerNumber = 4, n = 4, x = 2. Тогда sum_1 = t(4-2+1) + t4 = t3+t4 = 70 . Мне нужна общая формула, где x - количество вариантов, это может быть 1,2,3 или 4. sum_1 = t(n-x+1)+...+t(n-1)+tn
@TrinhPham, учитывая n = 2, можете ли вы поделиться ожидаемым результатом для всех строк? это: 17,3,0,70
?
Конечно, это ожидаемый результат
@TrinhPham, тогда как получится, если просто перевернуть слайсер на другую сторону df.ArraysDate.apply(lambda x: sum(x[len(x)-2:]))
?
Хорошо, я проверю и сообщаю вам, хе-хе
Вы можете сделать сумму в столбце ArraysDate в Pandas DataFrame следующим образом:
import pandas as pd
import numpy as np
d={'CustomerNumber':pd.Series([1,2,3,4]),
'ArraysDate':pd.Series([[1,4,13],[3],[0],[2,60,30,40]])}
df=pd.DataFrame(d)
df['sum']=[np.sum(i[0:(len(i)-1)]) for i in df['ArraysDate']]
print(df)
Выход:
CustomerNumber ArraysDate sum
0 1 [1, 4, 13] 5.0
1 2 [3] 0.0
2 3 [0] 0.0
3 4 [2, 60, 30, 40] 92.0
Может быть, что-то вроде:
def Caculator(x,arrayDates):
vList = []
for i in range(arrayDates.count()):
v = 0
for num in range(0, len(arrayDates[i])-x):
v = v + arrayDates[i][num]
vList.append(v)
return vList
для DataFrame:
data = [[1, [1, 4, 13]], [2, [3]], [3, [0]], [4, [2, 60, 30, 40]]]
s = pd.DataFrame(data, columns = ['CustomerNumber', 'ArraysDate'])
и вызовите функцию следующим образом:
s['Sum'] = Caculator(1,s['ArraysDate'])
Это тот же вопрос?: stackoverflow.com/questions/56248375/…