我正在嘗試遍歷列中的所有專案。
如果滿足列中的條件,則檢查是否滿足不同列中的另一個條件。
兩列中的資料型別不同,一個是整數,另一個是我要檢查的字串。
我不確定我哪里出了問題&到目前為止我在網上找到的所有資訊都是關于根據列中的資料創建新列的。
這是我正在使用的代碼的簡化版本。
import pandas as pd
servercount = 0
othercount = 0
df = pd.DataFrame({
'operatingsystem': ['Windows 7', 'Windows Server 2012', 'Windows Server 2012 R',
'macOSX', 'Linux Server'],
'login': [9, 12, 5, 11, 19],
})
for i in df['login']:
if i > 10:
if i in df['operatingsystem'].str.lower().str.contains("server"):
servercount = 1
else:
othercount = 1
print("Servers:", servercount, "\nOthers:", othercount)
目前這在 servercount 上回傳 0,在 othercount 上回傳 3,這意味著它沒有檢測到作業系統列中的單詞服務器。
uj5u.com熱心網友回復:
&
創建掩碼,通過bot 按位將兩個掩碼鏈接在一起AND
并用于計數使用Series.value_counts
,最后選擇True
和False
值:
m = (df['login'] > 10) & df['operatingsystem'].str.contains("server", case=False, na=False)
print (m.value_counts())
False 3
True 2
dtype: int64
out = m.value_counts()
print("Servers:", out[True], "\nOthers:", out[False])
Servers: 2
Others: 3
編輯:因為需要 3 個計數分別創建 3 個掩碼,~
用于反轉掩碼(與相同mask == False
):
m1 = df['login'] > 10
m2 = df['operatingsystem'].str.contains("server", case=False, na=False)
print("Servers greater 10:", (m1 & m2).sum(),
"\nServers less 10:", (m1 & ~m2).sum(),
"\nOthers:", (~m1).sum())
Servers greater 10: 2
Servers less 10: 1
Others: 2
uj5u.com熱心網友回復:
如果您只想要最終數字(如總服務器數和其他數),則考慮簡單地將邏輯傳遞給您的資料框。i
您僅使用 is進行迭代df['Login']
,您沒有在任何地方使用operatingsystem
值。
servercount = ((df['login'] > 10) & \
(df['operatingsystem'].str.contains("server",
case=False,
regex=True))).sum()
然后,通過差異你可以計算othercount
:
othercount = len(df) - servercount
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/533407.html
標籤:Python熊猫数据框
下一篇:使用熊貓添加具有重復鍵的列