Пользовательское сравнение для серии 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
И у него есть пороговое значение «по умолчанию», которое применяется к каждой категории, которая не имеет не было названо конкретно.
Я не могу понять, как это сделать в целом.
Я могу решить две отдельные подзадачи, но не всю проблему.
  • Я могу решить проблему с помощью отдельных категорий и порог по умолчанию.
  • Или я могу решить комбинированные категории, но не применять порог по умолчанию.
** Мне нужно оценить:**
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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