カラム名と値DFパンダから新しい列を作成します

LizzAlice:

私は、フォームのデータフレームを持っています:

basket            fruit_apple   fruit_pear   fruit_cherry
basket_id_1       5             NaN          6
basket_id_2       NaN           1            NaN

そして私は次のようになります。二つの新しい列を作成します:

basket          fruit_type   number
basket_id_1     apple        5
basket_id_1     pear         NaN
basket_id_1     cherry       6
basket_id_2     apple        NaN
basket_id_2     pear         1
basket_id_2     cherry       NaN

fruit_typeの内容はと自動的に決定されている場合colname.split('_')[1] どのようにこれは簡潔な方法で行うことができますか?

エズレル:

私は速い変更の列名は、(値の数が少ないので)新しい列をinstedので、私は使用を示唆していると思うrenameとの最初のステップとリシェイプでDataFrame.meltで、最後の変更のためにDataFrame.sort_values

df = (df.rename(columns= lambda x: x.split('_')[-1])
        .melt('basket', var_name='fruit_type', value_name='number')
        .sort_values('basket'))
print (df)
        basket fruit_type  number
0  basket_id_1      apple     5.0
2  basket_id_1       pear     NaN
4  basket_id_1     cherry     6.0
1  basket_id_2      apple     NaN
3  basket_id_2       pear     1.0
5  basket_id_2     cherry     NaN

もう一つのアイデアは、使用することであるDataFrame.set_indexDataFrame.stack

df = (df.set_index('basket')
        .rename(columns= lambda x: x.split('_')[-1])
        .rename_axis('fruit_type', axis=1)
        .stack(dropna=False)
        .reset_index(name='number')
        )
print (df)
        basket fruit_type  number
0  basket_id_1      apple     5.0
1  basket_id_1       pear     NaN
2  basket_id_1     cherry     6.0
3  basket_id_2      apple     NaN
4  basket_id_2       pear     1.0
5  basket_id_2     cherry     NaN

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=4718&siteId=1