Пользовательское сравнение для серии Pandas и словаряPython

Программы на Python
Anonymous
 Пользовательское сравнение для серии Pandas и словаря

Сообщение Anonymous »

У меня есть серия с четырьмя категориями A, B, C, D и их текущим значением < /p>
s1 = pd.Series({"A": 0.2, "B": 0.3, "C": 0.3, "D": 0.9})
и порог, по которому мне нужно сравнить категории,
threshold = {"custom": {"A, B": 0.6, "C": 0.3}, "default": 0.4}
Но пороговое значение имеет две категории, суммированные вместе: A & B
, и он имеет порог «по умолчанию» для применения к каждой категории, которая имеет Это было специально названо. < /p>
  • Я могу решить проблему с отдельными категориями и порогом по умолчанию. < /li>
    Или я могу решить комбинированные категории, но не применить порог по умолчанию.
Что мне нужно оценить:
s1[A]+s1 < threshold["custom"]["A,B"] :: 0.2 + 0.3 < 0.6
s1[C] < threshold["custom"]["C"] :: 0.3 < 0.3
s1[D] < threshold["default"] :: 0.9 < 0.4
< /code>
и вернуть эту серию: < /p>
# A,B True
# C False
# D False
< /code>
Вот что у меня есть для подзадачи < /p>
1. Чтобы применить порог по умолчанию, я reindex и fillna со значением по умолчанию:
aligned_threshold = (
pd.Series(threshold.get("custom"))
.reindex(s1.index)
.fillna(threshold.get("default"))
)
# A 0.4
# B 0.4
# C 0.3
# D 0.4
< /code>
Тогда я могу сравнить: < /p>
s1 < aligned_threshold
# A True
# B True
# C False
# D False
# dtype: bool
< /code>
2. Объединить категории
threshold_s = pd.Series(threshold.get("custom"))
s1_combined = pd.Series(index=threshold_s.index)
for category, threshold in threshold["custom"].items():
s1_combined[category] = sum([s1.get(k, 0) for k in category.split(", ")])
# now s1_combined is:
# A,B 0.6
# C 0.3
s1_combined < threshold_s
# A,B True
# C False
# dtype: bool

Но я потерял категорию d
для резюме, мне нужно:
s1[A]+s1
s1[C]
s1[D]
< /code>
, чтобы я мог сравнить таким образом:
s1 < threshold
и вернуть эту серию:
# A,B True
# C False
# D False


Подробнее здесь: https://stackoverflow.com/questions/793 ... dictionary

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