образец решения:
df = pd.DataFrame({'rule_id': [50014, 50238, 53139],
'comp1': [100, np.nan, 100],
'0f1410-0440-0123':[0,1,2],
'comp2': [np.nan,np.nan, np.nan],
'd10-0440-0123':[0,1,2],
'comp3': [np.nan,100, np.nan]})
print(df)
#delete columns which contains '-' in name
cols = [c for c in df.columns if '-' in c]
df.drop(cols, axis=1, inplace=True)
df.set_index('rule_id', inplace=True)
df = df.transpose()
print(df)
Начальный DF:
rule_id comp1 0f1410-0440-0123 comp2 d10-0440-0123 comp3
0 50014 100.0 0 NaN 0 NaN
1 50238 NaN 1 NaN 1 100.0
2 53139 100.0 2 NaN 2 NaN
Конечный DF:
rule_id 50014 50238 53139
comp1 100.0 NaN 100.0
comp2 NaN NaN NaN
comp3 NaN 100.0 NaN
надеюсь, что поможет !!
для второго вопроса, сгруппируйте все DFs
df1 = pd.DataFrame({'rule_id': [50014, 50238, 53139],
'comp1': [100, 100, 100],
'comp2': [100,100, 100],
'comp3': [1.0,1.0, 1.0]})
df2 = pd.DataFrame({'rule_id': [50028, 50258, 53339],
'comp1': [1.0, 1.0, 100],
'comp2': [100,np.nan, 100]})
df3 = pd.DataFrame({'rule_id': [50030, 50259, 53340, 53342],
'comp1': [1.0, 1.0, 100, 200],
'comp2': [100,100, 100, 200],
'comp3': [100,100, 100, 200],
'comp4': [1.0,np.nan, 1.0, np.nan]})
df1.set_index('rule_id', inplace=True)
df1 = df1.transpose()
df2.set_index('rule_id', inplace=True)
df2 = df2.transpose()
df3.set_index('rule_id', inplace=True)
df3 = df3.transpose()
listofdftransposed = [df1,df2,df3] #-> list of df as my result of extend job
df_result = pd.concat(listofdftransposed)
print(df_result)
output:
rule_id 50014 50028 50030 50238 50258 50259 53139 53339 53340 53342
comp1 100.0 NaN NaN 100.0 NaN NaN 100.0 NaN NaN NaN
comp2 100.0 NaN NaN 100.0 NaN NaN 100.0 NaN NaN NaN
comp3 1.0 NaN NaN 1.0 NaN NaN 1.0 NaN NaN NaN
comp1 NaN 1.0 NaN NaN 1.0 NaN NaN 100.0 NaN NaN
comp2 NaN 100.0 NaN NaN NaN NaN NaN 100.0 NaN NaN
comp1 NaN NaN 1.0 NaN NaN 1.0 NaN NaN 100.0 200.0
comp2 NaN NaN 100.0 NaN NaN 100.0 NaN NaN 100.0 200.0
comp3 NaN NaN 100.0 NaN NaN 100.0 NaN NaN 100.0 200.0
comp4 NaN NaN 1.0 NaN NaN NaN NaN NaN 1.0 NaN