python - 根据不同列的 if 条件创建新列
问题描述
我有以下数据集。我需要根据条件Col A * B * C * D * E
在新列中:Score
如果ID
&VID
相同,但QID
唯一或不同,则Col E
在计算新列时选择较高的值Score
ID VID QID A B C D E
121 212 123 1 2 1 1 1
121 212 435 1 2 1 1 5
223 244 567 2 3 5 1 2
313 232 709 5 1 2 1 3
313 232 887 5 1 2 1 2
454 969 457 1 3 2 2 4
454 969 457 1 2 1 2 4
预期的结果是这样的:
ID VID QID A B C D E Score
121 212 123 1 2 1 1 1 10 (because based on ID and VID I want to choose higher value in column E while calculating, and apply the same to those rows)
121 212 435 1 2 1 1 5 10
223 244 567 2 3 5 1 2 60
313 232 709 5 1 2 1 3 30
313 232 887 5 1 2 1 2 30
454 969 457 1 3 2 2 4 48
454 969 457 1 2 1 2 4 16
我曾尝试.sort
引入Col E
降序或升序格式,然后进行计算,但无法编写计算背后的逻辑。现在只是一个初学者试图解决这个问题几天。
解决方案
我可能会使解决方案过于复杂,但这就是我认为快速解决方案的样子:
第 1 部分:计算 QID 的唯一计数和 E 的最大值
df_tempA = df.groupby(["ID", "VID"]).agg({
'QID':"nunique",
'E': "max"
}).reset_index().rename(columns={'QID':"QIDCount",'E':"MaxE"})
print(df_tempA)
ID VID QIDCount MaxE
0 121 212 2 5
1 223 244 1 2
2 313 232 2 3
3 454 969 1 4
第 2 部分:加入原始数据框
df_result = pd.merge(df, df_tempA, on=["ID", "VID"])
print(df_result)
ID VID QID A B C D E QIDCount MaxE
0 121 212 123 1 2 1 1 1 2 5
1 121 212 435 1 2 1 1 5 2 5
2 223 244 567 2 3 5 1 2 1 2
3 313 232 709 5 1 2 1 3 2 3
4 313 232 887 5 1 2 1 2 2 3
5 454 969 457 1 3 2 2 4 1 4
6 454 969 457 1 2 1 2 4 1 4
第 3 部分:根据条件创建分数列
df_result['Score'] = df_result.apply(lambda df: df['A']*df['B']*df['C']*df['D']*df['E']
if df['QIDCount'] ==1
else df['A']*df['B']*df['C']*df['D']*df['MaxE'],
axis=1)
print(df_result)
ID VID QID A B C D E QIDCount MaxE Score
0 121 212 123 1 2 1 1 1 2 5 10
1 121 212 435 1 2 1 1 5 2 5 10
2 223 244 567 2 3 5 1 2 1 2 60
3 313 232 709 5 1 2 1 3 2 3 30
4 313 232 887 5 1 2 1 2 2 3 30
5 454 969 457 1 3 2 2 4 1 4 48
6 454 969 457 1 2 1 2 4 1 4 16
推荐阅读
- plsql - ORA-06550:第 6 行,第 1 列:PLS-00103:遇到符号“CREATE”
- qt - QMouseEvent::localPos() 和高 DPI 显示 (Mac Retina)
- java - 使用 Maven 添加文件夹中的所有文件以构建路径依赖项
- c# - 有没有一种方法可以等待当前不是异步的方法?
- excel - Excel VBA 处理工作簿在随机数量的工作簿后停止
- javascript - 在 React 中使用泛型键入 defaultProp 箭头函数方法
- php - 生成 WSSE-Header 时使用 Koltin 访问 ORO-Platform API 失败
- html - 在带有换行符的 flex 模型元素中切断前一个元素
- angular - 运行 e2e 量角器测试时如何指定 Angular 4 环境?
- javascript - 从弹出窗口提交表单后如何显示div?