python - 将列表中的字符串插入数据框公式以在 Pandas 中循环计算

标签 python pandas dataframe group-by pandas-groupby

希望每个人都好,我对 Python/Pandas 还是很陌生,想知道以下是否可行。我有一个来 self 的数据框的列/问题名称列表。我希望能够将它们传递到我的代码中

    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

最佳答案

你确实快到了。只需将“Council”设置为索引,然后重复您的操作,但要在整个 DataFrame 上进行。 groupby 操作可以在整个 DataFrame 中进行矢量化。

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

关于python - 将列表中的字符串插入数据框公式以在 Pandas 中循环计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53551824/

相关文章:

python - 为什么我无法重写使用 `to_dict` 的 `dataclass` 对象的 `dataclasses_json` 方法?

python - 如何计算具有条件的连续 Pandas 数据帧行之间的天差

python - Pandas:有条件的 2 列的累积和

python - 转置 Pandas 数据框

python-2.7 - Python Pandas Dataframe 合并并仅选择几列

python - 数据框的元组列表

python - 用于打印数字除数乘积的高效 python 代码

python - 协程的奇怪行为

python - 当加载图标并且 tk.mainloop 在线程中时,Tkinter 锁定 Python

pandas - 在同一台机器上安装 Tensorflow、NumPy 和 Pandas