【发布时间】:2022-06-10 20:12:19
【问题描述】:
在上一个问题中,我能够使用布尔索引完成求和值。
由于我有数十列,我将这些列存储在一个列表中以在 for 循环中使用,这样我就可以索引排名 0-5 的相关列值。
根据我的分析,我发现Disloyal30-40 岁的客户在 X 公司是 neutral or dissatisfied。“中性或不满意”意味着他们将服务和产品评为 0-2 分(满分为 5 分)。
我应该从 for 循环中插入 column 在最后一个块的哪个位置,有没有更好的方法来编写它?
示例数据:
Customer Type Age Satisfaction Design Food Wi-Fi Service Distance
Disloyal 28 Not Satisfied 0 1 2 2 13.5
Loyal 30 Satisfied 5 3 5 4 34.2
Disloyal 36 Not Satisfied 2 0 2 4 55.8
代码
ranked_cols = ['Customer Type', 'Age', 'Satisfaction', 'Design', 'Food', 'Wi-Fi', 'Service', 'Distance']
for column in df[ranked_cols]:
columnSeriesObj = df[column]
sub = df[
(df["Customer Type"] == "Disloyal")
& (df["Satisfaction"] == "Not Satisfied")
& df["Age"].between(30, 40)
]
sub[(sub[ranked_cols] <= 2)].shape[0]
(sub.melt(value_vars=[c for c in sub.columns if c.startswith(column)])
.groupby("variable")
.value_counts()
.to_frame()
.reset_index()
.rename(columns={0: "count"}))
【问题讨论】:
标签: python