返回由给定输入的序列重复最多的值

时间:2018-02-28 06:01:26

标签: python pandas pandas-groupby

尝试使用他的详细信息获得最受关注的新用户评级,例如年龄,gen,mar_sta和occ ......

数据集:

user    age gender  mar_sta occ rating
A   Young   M   married eng     PG13
B   adult   M   married doc      R
C   teen    M   single  clerk   NR
D   old     M   married retired  U
E   Young   F   married eng    PG13
F   adult   F   married doc     R
G   teen    F   single  clerk   NR
H   old     F   married retired U
I   Young   M   single  eng    PG13
J   adult   M   single  doc     R
K   teen    M   single  clerk   NR
L   old     M   single  retired U
M   Young   F   single  eng    PG13
N   adult   F   single  doc     R
O   teen    F   single  clerk   NR
P   old     F   single  retired U

这就是我拥有的数据库,我正在发送一个新用户的数据,并试图按照该序列找到最受关注的评级。

新用户:

user age gender mar_sta  occ rating
X   teen   M    single   clerk  ?
Y    Nan   F    single    eng    ?

我正在尝试使用我的数据集为新用户分配评级。数据中有空值,因此我必须忽略空值并考虑存在哪些值并指定评级。

对于用户Y,我的年龄为nan ..所以我的代码应该忽略年龄变量,只考虑gendermar_staocc并找到most watched rating

预期输出:

X : NR
Y : PG13

1 个答案:

答案 0 :(得分:0)

这段代码应该为您提供一个基本的起点。它将根据其他列返回该用户的正确“最受关注的评级”。

df = < your dataframe >

age_val = 'teen'
gender_val = 'M'
mar_sta = 'single'
occ = 'clerk'

frames = []

if age_val != None:
    age = df.groupby(['age', 'rating']).rating.count()['teen']
    frames.append(age)

if gender_val != None:
    gender = df.groupby(['gender', 'rating']).rating.count()['M']
    frames.append(gender)

if mar_sta != None:
    mar_sta = df.groupby(['mar_sta', 'rating']).rating.count()['single']
    frames.append(mar_sta)

if occ != None:
    occ = df.groupby(['occ', 'rating']).rating.count()['clerk']
    frames.append(occ)

result_table = pd.concat(frames).groupby(level=0).sum().fillna(0)
result_rating = result_table.idxmax()

您需要添加代码以从表中的“用户X”中提取各个字段,并且如果它们是NaN /无效,则将开头的变量设置为“无”。然后,您需要使用result_rating中的值设置用户X的评级字段。