假設我有一個資料框,我想計算我們有多少次元素,例如[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”。
uj5u.com熱心網友回復:
傳遞給Categoricalwhich 將為缺少的專案回傳 0
pd.Categorical(df['col1'],elem_list).value_counts()
Out[62]:
1 3
5 0
2 1
dtype: int64
uj5u.com熱心網友回復:
你可以這樣做:
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
uj5u.com熱心網友回復:
首先過濾Series.isin,DataFrame.loc然后使用Series.value_counts,如果順序很重要,最后添加Series.reindex:
df.loc[df["col1"].isin(elem_list), 'col1'].value_counts().reindex(elem_list, fill_values=0)
uj5u.com熱心網友回復:
您可以使用value_counts和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
基準(100k 值):
# 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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414801.html
標籤:
