Для метки столбца или комбинации меток в фрейме данных pandas получите название сделок со значениями » X » в этих метках столбцов, используя python для цикла

#python #pandas #for-loop #automation #pandas-groupby

Вопрос:

Я уже выполнил эту задачу с помощью повторяющегося кода, потому что мне нужно сделать это примерно для 100 меток столбцов. Тем не менее, я уверен, что должен быть способ с помощью цикла for сократить строку кода и полностью автоматизировать эту задачу. На изображении показаны данные , комбинация меток столбцов и желаемый вывод. Так, например, для ярлыков — Открыть Острый Перенос, Есть две сделки с X во всех трех ярлыках = PNB amp; КОМПЛЕКТ, и количество также отображается как 2.

 import os
import pandas as pd
df1= pd.read_excel("sample_data.xlsx")
labels = df1.iloc[3]
# print(labels)
df=pd.DataFrame(df1.values[4:],columns=labels)
df.rename(columns={df.columns[0]:"Deals"}, inplace=True)
df.head(15)

df_long = df[df["Long"]=='X'].reset_index()
df_long = df_long["Deals"]
Long = df_long.to_frame(name='Long')
print(Long)

df_AB = df[(df['Above']=='X') amp; (df['Below']=='X')].reset_index()
df_AB = df_AB["Deals"]
Above_Below = df_AB.to_frame(name='Above amp; Below')
print(Above_Below)

df_OEC = df[(df['Open']=='X') amp; (df["Edgy"] =='X') amp; (df["Carry"]=='X')].reset_index()
df_OEC = df_OEC["Deals"]
Open_Edgy_Carry = df_OEC.to_frame(name='Open_Edgy_Carry')
print(Open_Edgy_Carry)

dfs= [Long, Above_Below, Open_Edgy_Carry]
df_combined = pd.concat(dfs, axis=1)
df_combined.loc[-1]=df_combined.count()
df_combined = df_combined.sort_index().reset_index(drop=True)

Final = pd.ExcelWriter('output.xlsx', engine = 'xlsxwriter')
df_combined.to_excel(Final, sheet_name = 'Final Table', startrow=0, startcol=0, index=False)
Final.save()