У меня есть вопрос относительно панд и настроенных группировок групп, чтобы найти наиболее эффективный способ расчета моих значений. Вот мой фрагмент кода:Адаптация группы под заказ Pandas
import pandas as pd
listA = list('abcdefghijklmnopqrstuvwxyz') * 2
listB = listA[::-1]
listC = listA[::2] * 2
listD = "Won"
data1 = range(52)
data2 = range(52,104)
data3 = range(104,156)
rawStructure = [('A', listA),
('B', listB),
('C', listC),
('D', listD),
('Data1', data1),
('Data2', data2),
('Data3', data3)]
df = pd.DataFrame.from_items(rawStructure, orient='columns')
df.loc[40:,"D"] = "Lost"
def customfct(x,y,z):
print('x',x)
data = round(((x.sum() + y.sum())/z.sum()) * 100,2)
return data
def f(row):
val1 = row.loc[(row['D'] == "Won"), 'Data1'].sum()
val2 = row.loc[(row['D'] == "Won"), 'Data2'].sum()
val3 = row.loc[(row['D'] == "Won"), 'Data3'].sum()
val4 = customfct(row.loc[(row['D'] == "Won"), 'Data1'], row.loc[(row['D'] == "Won"), 'Data2'], row.loc[(row['D'] == "Won"), 'Data3'])
return val1, val2, val3, val4
groupByCriteria = "C"
agg = df[:].groupby(by=groupByCriteria).apply(f)
print(agg)
Я хотел бы знать, если есть более эффективный способ сделать группировку и применять индивидуальные расчеты (например, функции «customfct», в котором используются различные столбцы (Data1, Data2, Data3)). Мой первый подход был похож на то, что вы могли видеть здесь: http://www.shanelynn.ie/summarising-aggregation-and-grouping-data-in-python-pandas/, но представляется невозможным создать формулу, которая не ограничивается одним столбцом (например, lambda x: max (x) - min (x)). Кроме того, как бы вы вернули рамку данных pandas вместо серии pandas (с кортежем)? Заранее спасибо!
Это мой выходной ток (который является правильным, но я предполагаю, что есть более эффективный способ):
Каков ваш первый вопрос? Возможно, фактические данные, текущие результаты, желаемые результаты помогут. – Parfait
Я сделал некоторые изменения в своем оригинальном посте, вам нужно что-нибудь еще? – Sebastian