Как насчет этого? Я попробовал это на образце данных, и, похоже, он сработал.
import pandas as pd
# Build the dataframe
df = pd.DataFrame([
["CAN~CT0264~FemaleHoseAdaptorYellowMF", "Dispose UK", "dispose IT", "Dispose ES"],
["CAN~CT0970~AirBottleJack", "Dispose UK", "dispose IT", "Dispose ES"],
["CAN~CT2742~M8X1_25X10_8MM_25PC" ,"Dispose UK", "dispose IT", "Dispose ES"]],
columns = ["SKU","UK","IT","ES"])
# remove name of Market from respective column
for col in ['UK', 'IT', 'ES']:
df[col] = df[col].str.replace(col, '')
# The meat of it which sets index, does the stack, resets index, and renames columns to what you want
df = df.set_index('SKU').stack().reset_index().rename(columns={'level_1':'Market', 0:'Rule'})
print(df)
SKU Market Rule
0 CAN~CT0264~FemaleHoseAdaptorYellowMF UK Dispose
1 CAN~CT0264~FemaleHoseAdaptorYellowMF IT dispose
2 CAN~CT0264~FemaleHoseAdaptorYellowMF ES Dispose
3 CAN~CT0970~AirBottleJack UK Dispose
4 CAN~CT0970~AirBottleJack IT dispose
5 CAN~CT0970~AirBottleJack ES Dispose
6 CAN~CT2742~M8X1_25X10_8MM_25PC UK Dispose
7 CAN~CT2742~M8X1_25X10_8MM_25PC IT dispose
8 CAN~CT2742~M8X1_25X10_8MM_25PC ES Dispose