お世話になります。とある数表をmeltでtidy dataに変換してpivotで変換することを試みました。
実際のデータは300万行以上あるのですが、データとしては以下のような形です。(やや簡単化して最初の5行を書きます。)
データ種別 | DCF施設コード | 施設名称 | 製品 | 年月 | 値 |
---|---|---|---|---|---|
SOM CR | 01103811 | 北海道循環器病院 | 市場ポテンシャル区分(9月より累計) | 推定年月1209 | J |
SOM CR | 01103811 | 北海道循環器病院 | 市場ポテンシャル区分(3Week) | 推定年月1209 | K |
SOM CR | 01103811 | 北海道循環器病院 | 製品Aシェアレンジ(9月より累計) | 推定年月1209 | 0 |
SOM CR | 01103811 | 北海道循環器病院 | 製品Aシェアレンジ(3Week) | 推定感謝1209 | 0 |
SOM CR | 01103811 | 北海道循環器病院 | 主要製品切替フラグ | 推定感謝1209 | 0 |
ここでpivotをしようとしたのですが、valueの値が数値ではないため、pivot_tableではなく、pivotを使いました。このdataframeをdf2_longとしました。
df2_p=pd.pivot(df2_long, index=['データ種別',''DCF施設コード','施設名称'],
columns=['製品','年月'],
values="値")
上記のコマンドを打つと、
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-49-9b47980d8760> in <module>() 1 df2_p=pd.pivot(df2_long, index=['データ種別','DCF施設コード','施設名称'], 2 columns=['製品','年月'], ----> 3 values="値") C:\Anaconda3\lib\site-packages\pandas\core\reshape\pivot.py in pivot(data, index, columns, values) 447 ) 448 else: --> 449 indexed = data._constructor_sliced(data[values].values, index=index) 450 return indexed.unstack(columns) 451 C:\Anaconda3\lib\site-packages\pandas\core\series.py in __init__(self, data, index, dtype, name, copy, fastpath) 290 if len(index) != len(data): 291 raise ValueError( --> 292 f"Length of passed values is {len(data)}, " 293 f"index implies {len(index)}." ValueError: Length of passed values is 3964680, index implies 3.
というエラーがでます。
valueが数値でないため、pivot_tableが使えないと思ったのですが、何が間違っているか、分からず、お知恵を拝借できればと思いました。
何卒、よろしくお願い申し上げます。

回答1件
あなたの回答
tips
プレビュー