如何创建一个新列,其中包含DataFrame中另一列中特定值出现的百分比



我有一个列,它有一个值'Y'或'N'表示是或否。我希望能够计算出Yes出现的百分比。然后将其作为名为"Percentage">

的新列的值。到目前为止,我已经想出了这个,虽然这是我需要的,但我不知道如何以我描述的方式获得信息

port_merge_lic_df.groupby(['Port'])['Shellfish Licence licence (Y/N)'].value_counts(normalize=True) * 100
Port       Shellfish Licence licence (Y/N)
ABERDEEN   Y                                   80.731789
N                                   19.268211
AYR        N                                   94.736842
Y                                    5.263158
BELFAST    N                                   81.654676
...    
STORNOWAY  N                                   23.362692
0.383857
ULLAPOOL   N                                   56.936826
Y                                   43.063174
WICK       N                                  100.000000
Name: Shellfish Licence licence (Y/N), Length: 87, dtype: float64

数据帧的格式为:

df1 = pd.DataFrame({'Port': {0: 'NORTH SHIELDS', 1: 'NORTH SHIELDS', 
2: 'NORTH SHIELDS', 3: 'NORTH SHIELDS',
4: 'NORTH SHIELDS'},'Shellfish Licence licence (Y/N)': {0: 'N', 1: 'N', 
2: 'N', 3: 'N', 4: 'N'},
'Scallop Licence (Y/N)': {0: 'N', 1: 'N', 2: 'N', 3: 'N', 4: 'N'},
'Length Group': {0: 'Over10m',  1: 'Over10m', 2: 'Over10m',3: 
'Over10m',4: 'Over10m'}})
df1

你应该使用lambda

像这样:

res = port_merge_lic_df.groupby(['Port']).size().groupby('Shellfish Licence licence (Y/N)').apply(lambda x: x / x.sum())

最后一步:

res.reset_index(name='Percentage')

应该可以。

说"谢谢"是值得感激的,但这并不能回答问题。相反,投票给对你帮助最大的答案!如果这些答案对你有帮助,请考虑用一种更有建设性的方式来表达感谢——对你的同行在这里提出的问题给出你自己的答案。如果你不能投票给这一刻,无论你在哪里,请把我记在心里。

最新更新