[英]Creating a column in a pandas dataframe containing the number elements in the group (groupby)
我正在分析一個大型數據集,其中每個主題包含可變數量的觀察值(范圍從1次出現到26次出現...)。 由於我需要分析兩次事件之間的時間,因此僅發生一次的主題是非信息性的。
以前,在Stata中工作時,我將使用Stata代碼分配變量(例如,稱為total):
按idnummer排序:gen total = _N
這樣,每個行/主題都有一個變量“總計”,我可以消除所有主題合計= 1。
我一直在嘗試使用agg函數和大小,但最終以'NaN'結尾...
PS:通過側面的“類似問題”,我找到了自己問題的答案。
df ['total'] = df.groupby('idnummer')['sequence']。transform('max')
首先,您的問題令人困惑。 考慮對其進行編輯以使其清晰。
其次,IIUC,您希望消除包含僅在一列中出現一次的列中的值的行。
設定
考慮數據幀df
的樣本數據
import pandas as pd
import numpy as np
from string import ascii_uppercase
np.random.seed([3,1415])
df = pd.DataFrame(dict(mycol=np.random.choice(list(ascii_uppercase), 50)))
pd.value_counts
我們可以在此解決方案和其他解決方案中使用mycol
列的每個元素的頻率。
vc = df.mycol.value_counts()
vc
N 5
H 4
X 4
W 4
L 3
M 3
A 3
T 3
F 2
Z 2
E 2
S 2
C 2
D 2
Y 2
U 2
Q 1
G 1
K 1
P 1
I 1
Name: mycol, dtype: int64
選項1
pd.value_counts
和map
我們可以看到['Q', 'G', 'K', 'P', 'I']
都是單個出現。 使用map
將mycol
轉換為相對計數並進行過濾。
df[df.mycol.map(vc) > 1]
選項2
np.bincount
和np.unique
f = np.unique(df.mycol.values, return_inverse=True)[1]
df[np.bincount(f)[f] > 1]
您實際上並不需要groupby,只計算每個字符串的出現數會更簡單一些:
df['total'] = df.idnumber.apply(lambda x: df.idnumber.str.count(x).sum())
或者,您也可以像這樣映射值計數:
df['total'] = df.idnumber.map(df.idnumber.value_counts())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.