2017-06-25 6 views
0

私は、1件あたりの観測数が可変の大規模なデータセットを分析しています(1回発生から26回まで...)。事象間の時間を分析する必要があるので、1つの事象のみを有する被験者は非有益である。以前グループ内の数字要素を含むパンダデータフレームの列を作成する(groupby)

、IはStataのコードを使用して(例えば呼ばれる総。)変数を割り当てることになるのStataでの作業中:

idnummerによって、ソート:GEN合計= _N

このようにすべての行/主題を有します変数 'total'と私はすべての科目total = 1を取り除くことができます。私は自分の質問への答えを発見した側の「類似質問」を使用して:

PS

私はAGG機能で、大きさをしようとしているが、私は「NaNに」で終わります...。 ...

DF [ '合計'] = df.groupby( 'idnummer')[ 'シーケンス']。( '最大')を変換

答えて

0

まず第一に、あなたの質問は混乱しています。それを明確にするために編集することを検討してください。

第2に、IIUCでは、その列にのみ表示される列内の値を含む行を削除したいとします。

セットアップ
は、データフレーム我々は、この溶液と他の列mycolの各素子の周波数を使用することができる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
のサンプルデータを検討します。

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']はすべて、単一の発生があることがわかります。 mycolを相対カウントとフィルタに変換するにはmapを使用してください。

df[df.mycol.map(vc) > 1] 

オプション2
np.bincountnp.uniqueあなたが実際にこのためGROUPBY必要はありません

f = np.unique(df.mycol.values, return_inverse=True)[1] 
df[np.bincount(f)[f] > 1] 
0

、それだけで、各文字列の回出てくるカウントするように少し簡単です:

df['total'] = df.idnumber.apply(lambda x: df.idnumber.str.count(x).sum()) 

または、次のように値の数をマップできます。

df['total'] = df.idnumber.map(df.idnumber.value_counts()) 
関連する問題