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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2658閲覧

pandasでソートが上手くいかない

Tatsuo_Iriyama

総合スコア50

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/10/30 06:45

##現状

pandasを使用して、csvを読み込み、ある項目でソートをして、再度csvに落としたいと考えています。

現状sort_valuesを使用し、ascending=Falseで降順で並び替えようと思い、試しにスクリプトを実行して出力結果を確認すると、

0 999 users 1 998 users 2 997 users 3 996 users 4 996 users 5 996 users 6 995 users 7 994 users 8 993 users 9 993 users 10 991 users 11 991 users 12 990 users 13 990 users 14 988 users ... 1930 1018 users 1931 1018 users 1932 1018 users 1933 1017 users 1934 1017 users 1935 1016 users 1936 1016 users 1937 1015 users 1938 1015 users 1939 1015 users 1940 1014 users 1941 1014 users 1942 1012 users 1943 1012 users

このような形で出力されました。
※左はインデックス番号で、右が本来大きい順(降順)で並んで欲しい項目の値になります

記載コードはこちらです。

import pandas as pd csv = pd.read_csv("hogecsv").sort_values(['hoge'], ascending=False).reset_index(drop=True) print(csv['hoge']) exit()

理想は、

1 1018 users 2 1018 users 3 1018 users 4 1017 users 5 1017 users 6 1016 users 7 1016 users 8 1015 users 9 1015 users 10 1015 users 11 1014 users 12 1014 users 13 1012 users 14 1012 users ... 1930 998 users 1931 997 users 1932 996 users 1933 996 users 1934 996 users 1935 995 users 1936 994 users 1937 993 users 1938 993 users 1939 991 users 1940 991 users 1941 990 users 1942 990 users 1943 988 users

このような形です。

##疑問点

  • どうすれば理想の形に持って行く事が出来るのでしょうか?

ご回答よろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/10/30 06:55

ダミーデータで良いので10行くらいのcsvファイルを掲載してください
guest

回答1

0

ベストアンサー

原因はhoge列が文字列としてソートされているためだと思われます。
もっと簡潔な方法があるかもしれませんが、hoge列から数値を抽出し、その数値でソートします。

Python

1import pandas as pd 2df = pd.DataFrame( {'hoge':['1 users','9 users', '10 users']}) # テストデータ 3df['users'] = pd.to_numeric( df['hoge'].str.replace('users','')) # 文字列'10 users' を数値10に。 4df = df.sort_values(['users'], ascending=False).reset_index(drop=True)# 数値usersで降順ソート 5df = df['hoge'] # 不要なusers列を除去 6print(df) 7""" 80 10 users 91 9 users 102 1 users 11Name: hoge, dtype: object 12"""

投稿2018/10/30 07:24

can110

総合スコア38234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tatsuo_Iriyama

2018/10/30 12:15

ご回答ありがとうございます。 無事解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問