Эти три разных способа, как вы можете это сделать:
import pandas as pd
import numpy as np
data = np.array([
['A1', 'A1', 'A3' ,'A4' ,'A2' ,'A1' ,'A7', 'A1', 'A3', 'A5'],
[34.2, 54.2, 32.1, 54.3, 45.1, np.NaN ,np.NaN ,np.NaN, 23.1, -23.7],
[ 90.2, 23.5, 21.5, 93.1, 29.5, np.NaN,np.NaN ,np.NaN ,38.2, -98.4]])
df = pd.DataFrame({'**interview**':data[0,:],'**longitude**':data[1,:],'**latitude**':data[2,:]})
#first way
df['**occurs**']=1
print(df.groupby('**interview**')[['**longitude**','**latitude**','**occurs**']].count().\
reset_index())
#or
counts=0
gb = df.groupby(['**interview**'])
gb1 = df.groupby(['**interview**','**latitude**'])
counts = gb.size().to_frame(name='**occurs**')
print((counts
.join(gb1.agg({'**longitude**':lambda x: x.notnull().size}))
.join(gb1.agg({'**latitude**': lambda x: x.notnull().size}).rename(columns={'**latitude**': '*latitude*'}))
.reset_index()
))
#second way
counts=0
gb = df.groupby(['**interview**'])
counts = gb.size().to_frame(name='**occurs**')
print((counts
.join(gb.agg({'**longitude**': 'size'}))
.join(gb.agg({'**latitude**': 'size'}))
.reset_index()
))
#Third way this just for compare
print(df.groupby(['**interview**']).agg({'**longitude**':lambda x: x.notnull().sum(),
'**latitude**':lambda x: x.notnull().sum(),
'**interview**': 'size'})\
.rename(columns={'**interview**':'**occurs**'}))
См. Код здесь: https://repl.it/repls/OldVirtuousBooleanvalue