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