1
다른 열 팬더에 의해 하나 개의 열 그룹의 순열을 만들나는이 같은 dataframe을
df_want = pd.DataFrame([['jon snow', 'jon-snow', 'jon-snow'],
['jon snow', 'jon-snow', 'jon+snow'],
['jon snow', 'jon-snow', 'jonsnow'],
['jon snow', 'jon-snow', np.nan],
['jon snow', 'jon+snow', 'jon-snow'],
['jon snow', 'jon+snow', 'jon+snow'],
['jon snow', 'jon+snow', 'jonsnow'],
['jon snow', 'jon+snow', np.nan],
['jon snow', 'jonsnow', 'jon-snow'],
['jon snow', 'jonsnow', 'jon+snow'],
['jon snow', 'jonsnow', 'jon-snow'],
['jon snow', 'jonsnow', np.nan],
['jon snow', np.nan, 'jon-snow'],
['jon snow', np.nan, 'jon+snow'],
['jon snow', np.nan, 'jonsnow'],
['jon snow', np.nan, np.nan]], columns=['name', 'name_variation', 'name_variation_2'])
나는 작동하지만 긴 호흡 느끼는이 시도되었다 :
def combinations(df):
df = df.drop_duplicates()
df = df.dropna()
df['k'] = df['brand_variation']
df['val'] = 1
df_final = pd.DataFrame(columns=['brand', 'k', 'brand_variation',])
for res in df['brand'].unique():
#print(res, len(df[df['brand'] == res]))
dfm = df[df['brand'] == res]
dfk = pd.pivot_table(dfm, index=['brand', 'k'], columns=['brand_variation'], values=['val'], fill_value=0, aggfunc=[np.sum]).stack().reset_index()
dfk.columns = dfk.columns.get_level_values(level=0)
dfk = dfk[['brand', 'k', 'brand_variation']]
df_final = df_final.append(dfk)
df_final = df_final.reset_index(drop=True)
return df_final
더 좋은 방법은?