Скажем, у меня есть фрейм данных, и я хочу подсчитать, сколько раз у нас есть элемент, например, [1,5,2]
в каждом столбце.
Я мог бы сделать что-то вроде
elem_list = [1,5,2]
for e in elemt_list:
(df["col1"]==e).sum()
Но нет ли лучшего способа, как
elem_list = [1,5,2]
df["col1"].count_elements(elem_list)
#1 5 # 1 occurs 5 times
#5 3 # 5 occurs 3 times
#2 0 # 2 occurs 0 times
Обратите внимание, что он должен подсчитывать все элементы в списке и возвращать «0», если элемент в списке не находится в столбце.
4 ответа
Перейдите к Categorical
, который вернет 0 для отсутствующего элемента
pd.Categorical(df['col1'],elem_list).value_counts()
Out[62]:
1 3
5 0
2 1
dtype: int64
Вы могли бы сделать что-то вроде этого:
df = pd.DataFrame({"col1":np.random.randint(0,10, 100)})
df[df["col1"].isin([0,1])].value_counts()
# col1
# 1 17
# 0 10
# dtype: int64
Первый фильтр по Series.isin
a>и DataFrame.loc
a>, а затем используйте Series.value_counts
, последним, если важен порядок, добавьте Series.reindex
:
df.loc[df["col1"].isin(elem_list), 'col1'].value_counts().reindex(elem_list, fill_values=0)
Вы можете использовать value_counts
и < a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.reindex.html" rel="nofollow noreferrer">reindex
:
df = pd.DataFrame({'col1': [1,1,5,1,5,1,1,4,3]})
elem_list = [1,5,2]
df['col1'].value_counts().reindex(elem_list, fill_value=0)
Выход:
1 5
5 2
2 0
Эталон (100 000 значений):
# setup
df = pd.DataFrame({'col1': np.random.randint(0,10, size=100000)})
df['col1'].value_counts().reindex(elem_list, fill_value=0)
# 774 µs ± 10.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
pd.Categorical(df['col1'],elem_list).value_counts()
# 2.72 ms ± 125 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
df.loc[df["col1"].isin(elem_list), 'col1'].value_counts().reindex(elem_list, fill_value=0)
# 2.98 ms ± 152 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
df = pd.DataFrame({'col1': np.random.randint(0,1000, size=100000)})
?
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.
value_counts
, затемreindex
. Другие методы имеют стоимость фильтрации или построения категориального.