首页 > 解决方案 > 试图忽略 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 列中。

标签: excelpandaspython-2.7

解决方案


由于您的数据不可访问,我创建了一个类似于以下的测试数据 -

在此处输入图像描述

我们可以在 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

以下代码将进行总结 -

  1. 先总结一下12NC和SOC的数据,统计一下
  2. 按 12NC、count 和 SOC 排序,count 最高的在前
  3. 每12NC取SOC的第一个值
  4. 与原始数据合并以创建 E 列
  5. 导出回 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)

推荐阅读