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列中。
答案 0 :(得分:0)
由于无法访问您的数据,因此我创建了类似于以下内容的测试数据-
我们可以读取熊猫中的数据-
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
以下代码将进行汇总-
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)