提问人:SOURA ELLE 提问时间:11/7/2023 最后编辑:SOURA ELLE 更新时间:11/7/2023 访问量:126
如何使用 Python 在 Excel 文件中打印不同列的相同行值
how to print same rows values of different columns in a excel file using python
问:
我有一个 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
代码:
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)
答:
1赞
jezrael
11/7/2023
#1
您可以将 DataFrame.filter
用于 get 和列,通过 DataFrame.stack
进行重塑,并通过 Series.duplicated
过滤相同的值:SN
R
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.join
:SN-RESULT, R-RESULT
rsuffix
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)
R
SN
[R1,R2,R3, SN1, SN2]
R3
SN3
1赞
SOURA ELLE
11/7/2023
@jezrael真的很感谢你,你帮了我,我解决了问题,我能再问一个问题吗?
评论