如何使用 Python 在 Excel 文件中打印不同列的相同行值

how to print same rows values of different columns in a excel file using python

提问人:SOURA ELLE 提问时间:11/7/2023 最后编辑:SOURA ELLE 更新时间:11/7/2023 访问量:126

问:

我有一个 excel 文件,在每个 FOR 循环后,它会向 excel 查找添加一个“SN”列。
我想要的是找到不同“SN”列中的相同行。 这是我想对它进行操作的EXCEL:

print (df)
   SN1   R1   SN2    R2
0  SN1   38  SN20  1000
1  SN2   38  SN21   181
2  SN3  532  SN23     5
3  SN4  521  SN25    38
4  SN6  115  SN26  8718
5  SN7    3  SN27  3452
6  SN8  136  SN28   229
7  SN9  168  SN30   136

这就是我想要的结果 enter image description here

代码:

v=int(input("how many periods do you have:\n"))
new_excel_by_user=str(input("write the name of your new EXCEL 
file:"))
user_excel = pd.ExcelWriter(new_excel_by_user+'.xlsx', 
engine='xlsxwriter')
sys_excel=pd.ExcelWriter('sys_excel132.xlsx', engine='xlsxwriter')
final_excel=pd.ExcelWriter('final132.xlsx' , engine='xlsxwriter')


merged_df_H = pd.DataFrame()
merged_df_L = pd.DataFrame()
final_merged=pd.DataFrame()


for i in range(v):
print("\npriod %d :"%(i+1))

excelpathH=''+input(''+r"Insert your Excel path(HIGH):")
excelpathL=''+input(''+r"Insert your Excel path(LOW):")
excelpathH=excelpathH.replace('"', '')
excelpathL=excelpathL.replace('"', '')
dfH=pd.read_excel(os.path.join(excelpathH), engine='openpyxl' )
dfL=pd.read_excel(os.path.join(excelpathL), engine='openpyxl' )

Rnh=dfH['KPIVALUE']
Rnl=dfL['KPIVALUE']
R=Rnh-Rnl
merged_df_H['R%s'%(i+1)]=R
R=merged_df_H['R%s'%(i+1)]
#the below code returns true false only
RESULT=merged_df_H['R%s'%(i+1)].ge(130)
merged_df_H = 
pd.concat([merged_df_H,dfH.loc[mask,'SN'].rename('SN%s'% 
(i+1)).reset_index(drop=True),
R[mask].reset_index(drop=True)], axis=1)


merged_df_H = pd.concat([ merged_df_H,dfH,dfL,R,RESULT], axis=1 )

final_merged=pd.concat([final_merged,dfH['SN'], R,RESULT],axis=1)

糟糕的结果: enter image description here

新的强文本 enter image description here

Python Pandas Excel 数据帧 异常

评论

0赞 Cow 11/7/2023
请修复您的代码缩进,以便它可以复制/粘贴它。

答:

1赞 jezrael 11/7/2023 #1

您可以将 DataFrame.filter 用于 get 和列,通过 DataFrame.stack 进行重塑,并通过 Series.duplicated 过滤相同的值:SNR

R = df.filter(like='R').stack().reset_index(drop=True)
SN = df.filter(like='SN').stack().reset_index(drop=True)
mask = R.duplicated(keep=False)

print (pd.concat([SN[mask], R[mask]], axis=1, keys=('SN-RESULT','R-RESULT')))
   SN-RESULT  R-RESULT
0        SN1        38
2        SN2        38
7       SN25        38
12       SN8       136
15      SN30       136

out = df.join(pd.concat([SN[mask], R[mask]], 
                        axis=1, 
                        keys=('SN-RESULT','R-RESULT')).reset_index(drop=True))

如果输入 DataFrame 中已有列,请添加到 DataFrame.joinSN-RESULT, R-RESULTrsuffix

out = df.join(pd.concat([SN[mask], R[mask]], 
                        axis=1, 
                        keys=('SN-RESULT','R-RESULT')).reset_index(drop=True), 
              rsuffix='_new')

DataFrame.melt 的另一个想法:

R = df.filter(like='R').melt()['value']
SN = df.filter(like='SN').melt()['value']
mask = R.duplicated(keep=False)
out = df.join(pd.concat([SN[mask], R[mask]], 
                       axis=1, 
                       keys=('SN-RESULT','R-RESULT')).reset_index(drop=True))

评论

0赞 SOURA ELLE 11/7/2023
它给了我这个错误
1赞 Goku - stands with Palestine 11/7/2023
@SOURAELLE 你知道大写字母打字是???吗SHOUTING
1赞 SOURA ELLE 11/7/2023
@Goku,谢谢你的警告
1赞 jezrael 11/7/2023
@SOURAELLE - 检查 - 是否所有对都具有相同的数字和列?这意味着如果列在那里缺少对,因为没有 .这是错误的原因print (df.columns)RSN[R1,R2,R3, SN1, SN2]R3SN3
1赞 SOURA ELLE 11/7/2023
@jezrael真的很感谢你,你帮了我,我解决了问题,我能再问一个问题吗?