excel - 试图忽略 Excel 列中的零值
问题描述
预期输出在我正在处理的 Excel 电子表格中,有两列感兴趣,B 列和 E 列。在 B 列中有一些 0 值,这些值根据我正在运行的循环转移到 E 列关于 D 列。我想编写一个 Python 脚本来忽略这些 0,并根据它们的频率选择下一个最高值到 E 列。
12NC ModifiedSOCwrt12NC SOC
0 232270463903 0 0
1 232270463903 0 0
2 232270463903 0 0
3 232270463903 0 0
4 232270463903 0 RC0603FR-0738KL
5 232270463903 0 RC0603FR-0738KL
6 232270463903 0 RC0603FR-0738KL
我想运行一个循环,从 SOC(B 列)中选择非零值,并根据 D 列中的唯一值将其传递到 ModifiedSOCwrt12NC(E 列)。
例如,B 列在多行中有值 = [0, RCK2],这些值基于 D 列中的唯一值。因此,当前循环选择 B 列中值的最大出现次数并将其填充到 E 列中。如果有在 0 和 RCK2 的出现之间关系,它根据 ASCII 标准选择 0(我不想发生这种情况)。我希望代码选择 RCK2 并将其填写在 E 列中。
解决方案
由于您的数据不可访问,我创建了一个类似于以下的测试数据 -
我们可以在 pandas 中读取数据 -
import pandas as pd
df = pd.read_excel("ExcelTemplate.xlsx")
df
Index SOC Index2 12NC
0 YXGMY 0 ZJIZX 23445
1 NQHQC 0 JKJKT 23445
2 MWTLY 0 EFCYD 23445
3 RPQFE AC VLOJZ 23445
4 GPLUQ AC AKKKG 23445
5 WGYYM AC DSMLO 23445
6 XGTAQ 0 ZHGWS 45667
7 AMWDT 0 YROLO 45667
以下代码将进行总结 -
- 先总结一下12NC和SOC的数据,统计一下
- 按 12NC、count 和 SOC 排序,count 最高的在前
- 每12NC取SOC的第一个值
- 与原始数据合并以创建 E 列
- 导出回 Excel
df1 = df.groupby(['12NC', 'SOC'])['Index'].count().reset_index()
df = df.merge(df1[df1['SOC']!=0].sort_values(by=['12NC', 'Index', 'SOC'], ascending=[True, False, True])\
.drop_duplicates(subset=['12NC'], keep='first')[['12NC', 'SOC']].\
rename(index=str, columns={'SOC': 'ModifiedSOCwrt12NC'}),\
on = ['12NC'], how='left')
df.to_excel("ExcelTemplate_modifies.xlsx", index=False)
推荐阅读
- ruby-on-rails - 在调用关系的类方法中返回原始关系
- lazarus - 防止使用`TSelectDirectoryDialog`时需要手动滚动到“预选”文件夹
- php - 计算拆分中的输入值 - PHP
- c# - 电池耗尽时,紧凑型框架应用程序将被删除
- sql-server - 实体框架核心 - 错误:不支持关键字:“服务器”
- reactjs - 如何使用 create-react-kotlin-app 运行 Kotlin + React + Redux?
- apache-spark - Spark count dataframe 来估计输出分区,然后在没有缓存的情况下高效地写入?
- reactjs - Typescript 如何扩展原生 HTML 元素?
- docker - docker-compose 错误:需要卷而不是字符串
- powershell - 当我们使用powershell从Jenkins远程运行cmd(运行多个exe文件)时如何获取会话