我有一列
df['COL_1']
和一列數字
num_range = list(range(200。 281, 5)
這些列包含了諸如UNREADABLE NOT_PASSIVE等字樣,或者在上面的串列中存在一些值,所以200 205 210等或者什么都沒有。
我試圖得到一個總和,即該列中有多少行包含在給定范圍內的數字。
我所嘗試的是:
我所嘗試的是:
df['COL_1'].value_counts(num_range)
我不知道還可以嘗試什么,我所做的類似于上述的各種試驗都失敗了。 我是 python 的新手,非常感謝任何指導。
Python 2.7 和 pandas 0.24.2
。編輯:
我得到了錯誤,正如其他用戶提到的,我的資料不是數字。用.astype或者重新定義target_range來解決這個問題。
target_range = map(str, range(200, 281, 5)
uj5u.com熱心網友回復:
如果你要的是整個總和,而對單個計數的細分不感興趣,
如果你要的是整個總和,而對單個計數的細分不感興趣,那么
target_range = range(200, 281, 5)
df["COL_1"].isin(target_range).sum()
注意,你不需要將range物件鑄成list。
如果你想獲得價值計數的突破,請看 @Corralien 的回答。
細節。pandas.DataFrame.isin()是一個函式,回傳一個布爾掩碼。
>>> importpandas as pd
>>> # Data provided by Corralien
>>> df = pd. DataFrame({'COL_1'/span>: ['UNREADABLE', 200, 'NOT_PASSIVE', 205, 210, 200, ''/span>, 210, 180, 170, '']})
>>> target_range = range(200, 281, 5)
>>> df.isin(target_range)
COL_1
0 False
1 真
2 False[/span
3 真
4 真
5 True[/span
6 False[/span
7 真
8 False[/span
9 False[/span
10 False
注意,我使用的是df.isin()而不是df["COL_1"].isin()。如果你在你的DataFrame中有多個列,你想執行這個操作,你可以傳遞一個列名的串列。如果你想對整個DataFrame執行這個操作,你可以簡單地使用df.isin()。
.isin()方法回傳一個布爾掩碼。由于bool是int的一個子型別,你可以簡單地在得到的DataFrame上呼叫sum(),將所有的1和0相加,得到符合你的標準的所有行的最終統計。
uj5u.com熱心網友回復:
IIUC,你可以試試:
df = pd. DataFrame({'COL_1': ['UNREADABLE', 200, 'NOT_PASSIVE', 205, 210,
200, ''/span>, 210, 180, 170, '']})
out = df.loc[df['COL_1'].apply(pd.to_numeric, errors='coerce')
.isin(num_range), 'COL_1'] 。
.value_counts()
>>> out
200 2
210 2
205 1
名稱。COL_1, dtype: int64
>>> out.sum()
5
uj5u.com熱心網友回復:
你在DataFrame中的一列作為一個專案串列,同時還有另一個值串列。你想計算在串列中存在多少個來自DataFrame列的專案。
所以使用這個:
count = 0。
for i in df['COL_1'] 。
if i in num_range:
count =1。
在你的列上的每一次迭代中,如果值存在于串列中,計數變數增加1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/309330.html
標籤:
下一篇:為多列設定類別和型別可能嗎?
