Фрейм данных
У меня есть фрейм данных со многими элементами.
Элементы идентифицируются кодом "Тип" и весом.
В последнем столбце указываетсяколичество.
|-|------|------|---------|
| | type |weight|quantity |
|-|------|------|---------|
|0|100010| 3 | 456 |
|1|100010| 1 | 159 |
|2|100010| 5 | 735 |
|3|100024| 3 | 153 |
|4|100024| 7 | 175 |
|5|100024| 1 | 759 |
|-|------|------|---------|
Правило совместимости
Данный элемент "A" "совместим" с другими элементами, если:
- Это тот же тип
- Вес других элементов равен или меньше веса элемента "A"
Ожидаемый результат
Я хочу добавить столбец "совместимколичество »рассчитывается для каждой строки, сколько элементов совместимы.
|-|------|------|---------|---------------------|
| | type |weight|quantity | compatible quantity |
|-|------|------|---------|---------------------|
|0|100010| 3 | 456 | 615 | 456 + 159
|1|100010| 1 | 159 | 159 | 159 only (the lightest items)
|2|100010| 5 | 735 | 1350 | 735 + 159 + 456 (the heaviest)
|3|100024| 3 | 153 | 912 | 153 + 759
|4|100024| 7 | 175 | 1087 | ...
|5|100024| 1 | 759 | 759 | ...
|-|------|------|---------|---------------------|
Я хочу избежать использования цикла For, чтобы получить этот результат. (массив данных огромен).
Мой код с использованием цикла For
import pandas as pd
df = pd.DataFrame([[100010, 3, 456],[100010, 1, 159],[100010, 5, 735], [100024, 3, 153], [100024, 7, 175], [100024, 1, 759]],columns = ["type", "weight", "quantity"])
print(df)
for inc in range(df["type"].count()):
the_type = df["type"].iloc[inc]
the_weight = df["weight"].iloc[inc]
the_quantity = df["quantity"].iloc[inc]
df.at[inc,"quantity_compatible"] = df.loc[(df["type"] == the_type) & (df["weight"] <= the_weight),"quantity"].sum()
print(df)
Некоторые возможные идеи
- Может ли "применить" или "преобразовать" быть полезным?
- Можно ли это сделать с помощью loc внутри loc?