将列表中的字符串插入到数据帧公式中以循环计算

2024-06-16 15:38:49 发布

您现在位置:Python中文网/ 问答频道 /正文

希望大家都好,我对Python/Pandas还是很陌生的,我想知道下面的内容是否可行。我的数据框中有一个列/问题名列表。我想把它们传给我的代码

    Council     NPS EASE OSAT
0   CouncilA    5   99   2
1   CouncilB    0   4    2
2   CouncilC    4   1    5
3   CouncilA    1   4    5
4   CouncilB    3   1    3
5   CouncilC    1   4    3
6   CouncilA    4   1    99
7   CouncilB    4   4    1
8   CouncilC    3   3    3
9   CouncilA    2   2    1
10  CouncilB    4   99   4
11  CouncilC    2   2    5

这是我试图更新的代码

df = df[['Council', 'NPS', 'EASE', 'OSAT']]

percent4_5 = df[(df['NPS'] >= 4) & (df['NPS'] <=5 )].groupby(['Council'])['NPS'].count()
base = df[(df['NPS'] >= 0) & (df['NPS'] <=5 )].groupby(['Council'])['NPS'].count()
score = (percent4_5 / base)

目前,如果我想计算“EASE”等分数,我必须将“NPS”替换为“EASE”,因为每个问题的基数不同。如果代码可以在列表中循环并输出“NPS”、“EASE”、“OSAT”的结果,那就太好了

我希望在这个论坛上我能遵守礼仪。如果我做错了什么,请告诉我

Excel的预期输出: enter image description here


Tags: 代码pandasdf列表basecountgroupbynps
1条回答
网友
1楼 · 发布于 2024-06-16 15:38:49

你真的快到了。只需将“Council”设置为索引,并重复您的操作,但要将数据帧作为一个整体groupby操作可以在整个数据帧中进行矢量化

df = df.set_index('Council')
percent4_5 = df[(df >= 4) & (df <= 5)].groupby(level=0).count()
base = df[(df >= 0) & (df <= 5)].groupby(level=0).count()

score = percent4_5 / base
print(score)
           NPS      EASE      OSAT
Council                           
CouncilA  0.50  0.333333  0.333333
CouncilB  0.50  0.666667  0.250000
CouncilC  0.25  0.250000  0.500000

相关问题 更多 >