1
を1列グループの順列を作成します。私が欲しいもの私はこのようなデータフレームを持つ別の列パンダによって
In [1]: df = pd.DataFrame([['jon snow', 'jon-snow'], ['jon snow', 'jon+snow'], [jon snow, 'jonsnow']], columns=['name', 'name_variation'])
は次のとおりです。
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
これを行うには良い方法はありますか?