Сочетая индексное представление и array.prod(axis)
, это работает в ~ 100 раз быстрее:
def f1():
#with loop
new_df = pd.DataFrame()
for p in combinations_with_replacement(df.columns,2):
title = p
new_df[title] = df[p[0]]*df[p[1]]
return new_df
def f2():
n = len(df.columns)
ix = np.indices((n,n))[:, ~np.tri(n, k=-1, dtype=bool)]
return pd.DataFrame(df.values.T[ix.T].prod(1).T, columns=list(map(tuple, ix.T)))
Вы должны придерживаться стандарта ISO , если это вообще возможно.
ISO / IEC 5218 Информационные технологии. Коды для представления человеческих полов - это международный стандарт, который определяет представление человеческих полов посредством не зависящего от языка однозначного кода. ...
Четырьмя кодами, указанными в ИСО / МЭК 5218, являются:
- 0 = неизвестно,
- 1 = мужчина,
- 2 = женщина,
- 9 = не применимо.
Стандарт определяет, что на его использование может ссылаться обозначение «SEX».
Женщины и мужчины не являются взаимоисключающими, поэтому вам придется придумать что-то для транссексуалов, унисекс и т. Д. .
Чтобы сделать это максимально корпоративным, создайте столбец GenderTypeID
:
GenderTypes
-----------
GenderTypeID Name Greeting
1 Male Dear Sir
2 Female Dear Madam
3 Unisex Dear Sir and Madam
4 Unknown Dear Sir or Madam
5 Android Dear Artificial Life Form
... и т. Д.
Возможно, имя столбца «пол» (char с «M», «F») сделало бы меня более «чувствительным» .
Что ж, типичная вещь - это колонка «секс», но у вас могут оказаться невежественные клиенты, пытающиеся заполнить ее. со значениями «дважды в неделю».
Другая проблема заключается в том, что это зависит от языка. Например, на английском языке M будет означать M an, а на испанском языке это может означать M ujer (женщина).
isFemale указывает на большую проблему с вашей схемой, нечто подобное должно быть обобщено или, возможно, даже нормализовано:
Например, наличие на вашем столе колонки секса, которая является FK для таблицы секса:
---------------------
| ID | Type |
|-------------------|
| 1 | Male |
| 2 | Female |
| 3 | Yes Please |
---------------------
Заметьте, на самом деле не делайте этого, это глупо, если вы не планируете поддерживать необычные полы. Я все еще думаю, что общий столбец лучше, чем бит isFemale.
Ясно, что спрашивающий обеспокоен ( справедливо) о том, что разработчик базы данных не принял во внимание нейтральный по отношению к ценностям язык.
(Обратите внимание, что политически корректный (справедливо) больше не считается принятым, нейтральным по отношению к ценностям языком.)
Как компьютерный дизайнер Вы несете особую ответственность за обеспечение того, чтобы ваши дизайны, по неосторожности или нет, не включали и не пропагандировали гендерные предпочтения или превосходство.
Хотя разработчик мог наивно полагать, что IsFemale даст женщинам 1 и, следовательно, более высокое / превосходное значение, истинным значениям часто присваивается значение -1. Не говоря уже о культурах, где 0 - священная ценность.
В следующей статье мы расскажем о людях, которые занимаются теорией интерсексуалов и странностей и ее последствиями для стандартов именования переменных.
Вам когда-нибудь придется проверять «IsFemale» true / false?
колонка типа "PersonType" или что-то подобное подойдет? Таким образом, у вас может быть «женщина», «мужчина», «компания» и т. Д. - больше возможных значений.
Марк
PS: но если вы решите использовать «битовый» (логический) столбец, то Префикс «Is» или «Has», на мой взгляд, является хорошим выбором - дает понять, что это логическое значение!
Что не так с классическим "полом" и вспомогательными подтипами, такими как M, F и т. Д ...
В каждой базе данных, с которой я когда-либо работал, использовалось имя столбца Gender со значениями 0 для женщин и 1 для мужчин , Я всегда предполагал, что эти значения были назначены во многом таким же образом, что электронное оборудование имеет разъемы, которые описываются как женские или мужские.
Вопрос о том, смехотворен ли IsFemale, зависит от намерений системы, однако, похоже, это действительно так. нарисовал приложение в угол. Например, половые поля могут быть увеличены, чтобы вместить дополнительный «тип», но IsFemale, очевидно, всегда будет истинным или ложным и, следовательно, вовсе не расширяемым.
Пол
кажется лучшим выбором, но если вы хотите или должны использовать логический столбец, есть только два варианта - IsMale или IsFemale.
Если вы спрашиваете, смехотворно, это зависит. Будет ли Мейл лучше, шовинист? (Шучу!)
Я предполагаю, что тот, кто разрабатывал базу данных, думал о специальных бизнес-правилах для женщин и разрабатывал ее таким образом.
Там действительно нет ' Причина, по которой мужчина должен быть истинным, а женщина должна быть ложным, и, возможно, ваша база данных менее эффективна в использовании сравнения символов и символов.
С точки зрения программирования, избегать логических выражений в таблицах имеет смысл по тем же причинам, по которым целесообразно избегать логических выражений в параметрах функций.
Для простых систем, где нет сексуальной неопределенности, я использую IsMale. Альтернативой может быть использование таблицы поиска, если ваши требования включают людей с интерсексами. Если у вас есть только мужчины и женщины, использование чего-либо, кроме логического значения, вносит ненужную сложность и двусмысленность в систему.