【问题标题】:Trying to ignore zero values in Excel column试图忽略 Excel 列中的零值
【发布时间】:2019-06-28 22:47:58
【问题描述】:

Expected Output在我正在处理的 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 列中。

【问题讨论】:

  • 请不要将输入作为图像,很难重现您的输入。请提供预期结果。
  • 我想运行一个循环,从 B 列中选择非零值,并根据 D 列中的唯一值将其传递到 E 列。
  • 我不明白你在说什么,我真的不清楚。你是如何迭代你的行的?你是什​​么意思携带这里?是否要将 B 列中的值替换为 B 列为 0 的 D 列?请提供样本输入和输出
  • 例如:B 列在多行中有值 = [0, RCK2],它基于 D 列中的唯一值。因此,当前循环选择 B 列中值的最大出现次数并填充它进入 E 列。如果 0 和 RCK2 的出现之间存在联系,它会根据 ASCII 标准选择 0(我不希望它发生)。我希望代码选择 RCK2 并将其填写在 E 列中。希望这使它更清晰一些。
  • 对不起,我没听懂你,我不明白你为什么不花时间用更干净的方式编辑问题?你的问题不清楚。请在您的问题部分提供示例输入和输出。

标签: excel pandas python-2.7


【解决方案1】:

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

我们可以在 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、计数和 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)

【讨论】:

  • 感谢您为帮助我所做的努力。你能告诉我如何跳过一个特定的值,比如 0 在这种情况下,然后选择在循环中出现次数第二多的下一个值。
  • 在我的代码sn-p中,看看我写的地方——df1[df1['SOC'] !=0],这是跳过零,可以用来跳过任何值跨度>
猜你喜欢
  • 2019-03-30
  • 2020-12-10
  • 2023-03-26
  • 2020-05-19
  • 1970-01-01
  • 2014-07-02
  • 2020-07-09
  • 1970-01-01
  • 2015-03-05
相关资源
最近更新 更多