Pandas группирует и взвешивает сумму для нескольких столбцовPython

Программы на Python
Anonymous
Pandas группирует и взвешивает сумму для нескольких столбцов

Сообщение Anonymous »

Я видел дюжину вопросов Pandas, сгруппированных по нескольким столбцам, но не знаю, как заставить это работать в разумные сроки. Моя цель — сгруппировать несколько столбцов и с помощью полученного подмножества применить np.dot к каждому оставшемуся столбцу в соответствии с моими весами:

# Example data:
weights = np.array([.20, .60, .20])
data = pd.DataFrame([[0, "TX", 10, 55], [0, "TX", 5, 30], [0, "TX", 2, 75], [1, "TX", 4, 30], [1, "TX", 8, 100], [1, "TX", 2, 30]], columns=["sim", "state", "x1", "x2"])

print(data)
sim state x1 x2
0 0 TX 10 55
1 0 TX 5 30
2 0 TX 2 75
3 1 TX 4 30
4 1 TX 8 100
5 1 TX 2 30


Мне не удалось заставить np.dot работать «из коробки», поэтому мне пришлось разбить умножение и суммирование на отдельные шаги. Вот что я пробовал, но для моего набора данных из нескольких миллионов строк это занимает около 2 минут, не говоря уже о том, что это довольно нечитабельно:

results = data.groupby(["sim", "state"]).apply(lambda sdf: (sdf[["x1", "x2"]] * weights.reshape((3,1))).sum())

print(results.reset_index())
sim state x1 x2
0 0 TX 5.4 44.0
1 1 TX 6.0 72.0


Подробнее здесь: https://stackoverflow.com/questions/596 ... le-columns

Вернуться в «Python»