尝试忽略Excel列中的零值
在我正在处理的Excel电子表格中有两列,列B和列E。在列B中有一些0值,这些值根据我正在运行的关于列D的循环传递到列E。我想编写一个Python脚本来忽略这些0值,并根据它们在列E中的频率选择下一个最高值尝试忽略Excel列中的零值,excel,pandas,python-2.7,Excel,Pandas,Python 2.7,在我正在处理的Excel电子表格中有两列,列B和列E。在列B中有一些0值,这些值根据我正在运行的关于列D的循环传递到列E。我想编写一个Python脚本来忽略这些0值,并根据它们在列E中的频率选择下一个最高值 12NC ModifiedSOCwrt12NC SOC 0 232270463903 0 0 1 232270463903 0
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列中的数据。由于您的数据不可访问,我创建了一个类似于下面的测试数据- 我们可以读取熊猫的数据-
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、计数和SOC排序,首先是最高计数
取每个12NC的SOC的第一个值
与原始数据合并以创建列E
导出回Excel
请不要把输入作为图像,它很难复制您的输入。请提供预期的结果。我想运行一个循环,从B列中选取非零值,并根据D列中的唯一值将其传递到E列。我不明白你在说什么,我真的不清楚。如何迭代行?你这是什么意思?是否要将B列中的值替换为B列为0的D列中的值?请为ex提供示例输入和输出:B列的值=[0,RCK2]位于多行中,这是基于D列中的唯一值。因此,当前循环选择B列中出现的最大值,并将其填充到E列中。如果出现的0和RCK2之间存在关联,它根据ASCII标准选择0,我不希望发生这种情况。我希望代码选择RCK2并填写E列中的内容。希望这能让它更清晰。对不起,我没有理解你,我不明白你为什么不花时间以更清晰的方式编辑问题?你的问题不清楚。请在问题部分提供输入和输出示例。感谢您为帮助我所做的努力。你能告诉我在这种情况下如何跳过一个特定的值,例如0,并选择循环中出现次数第二高的下一个值。在我的代码片段中,请参阅我写的地方-df1[df1['SOC']!=0],这是跳过零,可以用来跳过任何值
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)