質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

objectとdatetimeでできたリストはソートできない???

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 45

Pablito

score 34

前提・実現したいこと

購買データのデータ加工を
Jupyter Notebook上でしています。
object型のIDとdatetime型の日付でできた
リストを昇順でソートしたいと思ったのですが
以下のエラーが起き実行できませんでした。

発生している問題・エラーメッセージ

TypeError                                 Traceback (most recent call last)
<ipython-input-22-e2c1bcf11d28> in <module>
      1 #昇順に並べ替え
----> 2 times.sort()

c:\users\01029944\kawamura\lib\site-packages\pandas\core\ops\__init__.py in wrapper(self, other, axis)
   1177                 other = Timestamp(other)
   1178 
-> 1179             res_values = dispatch_to_index_op(op, self, other, pd.DatetimeIndex)
   1180 
   1181             return self._constructor(res_values, index=self.index, name=res_name)

c:\users\01029944\kawamura\lib\site-packages\pandas\core\ops\__init__.py in dispatch_to_index_op(op, left, right, index_class)
    628         left_idx = left_idx._shallow_copy(freq=None)
    629     try:
--> 630         result = op(left_idx, right)
    631     except NullFrequencyError:
    632         # DatetimeIndex and TimedeltaIndex with freq == None raise ValueError

c:\users\lib\site-packages\pandas\core\indexes\datetimelike.py in wrapper(self, other)
    130                 other = other._values
    131 
--> 132             result = op(self._data, maybe_unwrap_index(other))
    133             return result
    134 

c:\users\lib\site-packages\pandas\core\arrays\datetimes.py in wrapper(self, other)
    200                 with np.errstate(all="ignore"):
    201                     result = ops._comp_method_OBJECT_ARRAY(
--> 202                         op, self.astype(object), other
    203                     )
    204                 o_mask = isna(other)

c:\users\lib\site-packages\pandas\core\ops\__init__.py in _comp_method_OBJECT_ARRAY(op, x, y)
   1065             y = y.values
   1066 
-> 1067         result = libops.vec_compare(x, y, op)
   1068     else:
   1069         result = libops.scalar_compare(x, y, op)

pandas\_libs\ops.pyx in pandas._libs.ops.vec_compare()

TypeError: '<' not supported between instances of 'Timestamp' and 'str'

該当のソースコード

#まずは、「回数=同ID×同日×同店」のリストを作成する
times = [whole['cst_id'], whole['date_purchase_c'], whole['Store_code']]
times


[0         3144054828245
1         3144054828245
2         3144054886139
3         3144054886139
4         3144054886139
...      
959000    3149006447374
959001    3149006447374
959002    3149007331709
959003    3149007673303
959004    3149007673303
Name: cst_id, Length: 959005, dtype: object, 0        2017-06-14
1        2018-09-22
2        2017-06-18
3        2017-06-18
4        2018-07-21
...    
959000   2018-09-29
959001   2018-09-29
959002   2018-09-29
959003   2018-09-30
959004   2018-09-30
Name: date_purchase_c, Length: 959005, dtype: datetime64[ns], 0         3001
1         5026
2         3001
3         3001
4         3042
... 
959000    6116
959001    6116
959002    6116
959003    6116
959004    6116
Name: Store_code, Length: 959005, dtype: object]

#昇順に並べ替え
times.sort()

試したこと

int()とかをリストを作る段階で使い、
ID等の型を変えようとしましたが、
TypeError等が起き、
上手くいきませんでした。

また、sort_indexやsort_valuesも試してみたのですが、
AttributeError: 'list' object has no attribute 'sort_index'
みたいなエラーが起きてうまくいきません。。。

これはリストの作り方から変えたほうがいいのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Pablito

    2019/08/14 15:19

    'cst_id'ごとに'date_purchase_c'と'Store_code'を
    昇順に並べ替えたリスト、
    で伝わりますでしょうか?

    キャンセル

  • Pablito

    2019/08/14 15:21

    同じcst_idごとに、同じdate_purchase_c、Store_codeでまとめたくて、
    これをまとめた上で、昇順に並べ替えたいのです。
    上手く伝えられないのですが理解できますか?

    キャンセル

  • meg_

    2019/08/14 16:19

    DataFrameのgroupby()で実現できそうな気がします。
    元データが分からないので確かではありませんが、試してみてください。

    キャンセル

回答 1

check解決した方法

0

よくわからなかったので、最終pd.DataFrameを使いました。

times = pd.DataFrame(whole[['cst_id', 'date_purchase_c', 'Store_code']])
times


Outputはこんな感じになり

cst_id      date_purchase_c Store_code
0 3144054828245 2017-06-14   3001
1 3144054828245 2018-09-22   5026
2 3144054886139 2017-06-18   3001
3 3144054886139 2017-06-18   3001
4 3144054886139 2018-07-21   3042
5 3144054886139 2018-10-28   3042
6 3144055008531 2017-06-11   3001
7 3144055018841 2017-06-13   3001
8 3144055018841 2017-10-28   3220
9 3144055018841 2018-03-15   3001

意外とsortしなくても
idごと購入日が早い順に並んでいる気がします。
どう思われますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る