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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

Q&A

解決済

1回答

2920閲覧

pandasで重複しない値が出たら新しい番号を振り、その番号を新しく列に追加したい

MitMc

総合スコア34

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

0グッド

0クリップ

投稿2018/11/20 11:52

下記のデータフレーム にて、日付が重複していない日付が出る度に
新しいID番号を振り、変更前から変更後のようにデータフレーム を変更
するにはどうしたら良いでしょうか?

python

1df = pd.DataFrame( 2 { 3 '日付':["2月27日","2月27日","3月10日","4月10日", 4 "4月10日","4月10日","5月1日","6月28日"], 5)

変更前
....... 日付  
0 2月27日
1 2月27日
2 3月10日
3 4月10日
4 4月10日
5 4月10日
6 5月1日
7 6月28日

変更後

....... 日付...........ID  
0 2月27日.....1
1 2月27日.....1
2 3月10日.....2
3 4月10日.....3
4 4月10日.....3
5 4月10日.....3
6 5月1日......4
7 6月28日.....5

自分の試したこと

python

1 2array_unique = df['日付'].unique() 3list_unique = list(array_unique) 4 5#カウント列を追加し、同じ日付が出ると連番が振られるようにする。 6df['count'] = df.groupby('日付').cumcount()+1 7#countが1のみの重複しない行を抽出し、new_dfとする。 8new_df=df[df['count']==1] 9重複しない行の数の連番をリストにする 10new_list = list(range(len(list_unique))) 11上記連番リストをデータフレーム に代入 12new_df["ID"]=new_list 13

上記のように実行すると、一応、ID列を追加できるのですが、
: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
というエラーが出てしまいます。

エラーが出ない方法もしくは、もっとスムーズに実現する方法をご教授ください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

factorize() を使えばいいのではないでしょうか。

Encode the object as an enumerated type or categorical variable.
This method is useful for obtaining a numeric representation of an array when all that matters is identifying distinct values.

python

1import pandas as pd 2df = pd.DataFrame( 3 {'日付':["2月27日","2月27日","3月10日","4月10日", 4 "4月10日","4月10日","5月1日","6月28日"]} 5) 6 7df['ID'] = pd.factorize(df['日付'])[0]

イメージ説明

投稿2018/11/20 11:59

tiitoi

総合スコア21956

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

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

MitMc

2018/11/20 14:51

望むデータフレーム が作れました。 大変助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問