尝试忽略Excel列中的零值

时间:2019-02-05 06:41:12

标签: excel pandas python-2.7

Expected Output在我正在处理的Excel电子表格中,有两列您感兴趣的列,即B列和E列。B列中有一些0值,这些值根据关于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

我想运行一个循环,该循环根据D列中的唯一值从SOC(列B)中选择非零值,并将其传递给ModifiedSOCwrt12NC(列E)。

例如,B列在多行中的值= [0,RCK2],这些行基于D列中的唯一值。因此,当前循环选择B列中出现的最大值,并将其填充到E列中。在0和RCK2的出现之间有联系,它按照ASCII标准(我不想发生)选择0。我希望代码选择RCK2并将其填充在E列中。

1 个答案:

答案 0 :(得分:0)

由于无法访问您的数据,因此我创建了类似于以下内容的测试数据-

enter image description here

我们可以读取熊猫中的数据-

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,计数和SOC排序,首先计数最高
  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)