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

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

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

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

pandas

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

Q&A

解決済

4回答

3696閲覧

Pyhton pandas で重複行のカウント

kentashx

総合スコア15

Python 3.x

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

pandas

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

0グッド

1クリップ

投稿2018/02/10 11:08

編集2018/02/10 13:24

【やりたい事】
csvファイル中の5万行×4列のデータの中で重複する行の個数をカウントしようとしています。

【背景】
Excelのピボットを組もうとすると、動作を停止するので、Pyhtonのpandasを用いて処理しようとしています。

【質問内容】
①重複行をカウントする方法が分かりません。
②また、それを元のcsvファイルに5列目に出力する方法が分かりません。

以上もし分かる方がいらっしゃったらお願いします。

【追記事項】
重複行のカウント方法と出力結果についての具体的な明記が無いと指摘を受けたので、追記します。

重複行のカウントという表現は適切でなく、csvファイル内で重複無しの行ならば1を出力します。

例)
1行目は重複なし->出力結果1
2、3、4は重複->出力結果3
5、6は重複->出力結果は2です。
(1、2、5は異なる行です)

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

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

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

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

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

magichan

2018/02/10 12:48

重複する行の個数をカウントと書かれておりますが、どのようにカウントするべきなのかの詳細を教えていただけないでしょうか。 例えば 1行目は重複無し、2行目・3行目・4行目が同一、5行目・6行目が同一の場合、2行目から6行目が重複行なので結果は5でよいのでしょうか? また5行目(5列目の間違い?)に出力する結果とは何を書くのでしょうか?
guest

回答4

0

ベストアンサー

一応修正依頼をした手前、回答を書いておきます。
仕様からみると groupby.transform('count') 使用するのが簡単かと思います。

Python

1import pandas as pd 2 3df = pd.DataFrame([[1,2,3,4],[2,3,4,5],[2,3,4,5],[3,4,5,6],[3,4,5,6],[3,4,5,6]]) 4 5df['dup'] = df.groupby([0,1,2,3])[0].transform('count') 6print(df) 7# 0 1 2 3 dup 8# 0 1 2 3 4 1 9# 1 2 3 4 5 2 10# 2 2 3 4 5 2 11# 3 3 4 5 6 3 12# 4 3 4 5 6 3 13# 5 3 4 5 6 3

もし、重複した行を表示しないのであれば groupby.size() でよいでしょう

Python

1ret_df = df.groupby([0,1,2,3]).size() 2print(ret_df) 3# 0 1 2 3 4# 1 2 3 4 1 5# 2 3 4 5 2 6# 3 4 5 6 3

投稿2018/02/11 00:26

編集2018/02/11 06:17
magichan

総合スコア15898

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

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

0

numpy.unique()を使うと、重複を除いた一覧と出現件数を取得できるので、これを活用するのはどうでしょうか?処理イメージは以下です。
1)重複を評価するデータを抽出する
2)numpy.uniqueを活用して重複を除いた一覧と出現件数を取得する(オプションのreturn_count=True必須)
3)重複を除いた一覧とオリジナルのデータを比較して、該当する出現件数をセットする

なお、3)は2)の結果をdataframeに変換してpandas.mergeを使うといいかと思います

投稿2018/02/10 17:10

R.Shigemori

総合スコア3376

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

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

0

40000行x4列のテストデータ(testpd)を作り、b列の出現頻度を計算して対応する数値をe列に追加するスクリプトを書いてみました。

python

1import pandas as pd 2import random as rd 3 4rnum = 40000 5testpd = pd.DataFrame({ 6 "a": range(0, size), 7 "b":[int(rd.random()*10) for _ in range(0,rnum)], 8 "c":[int(rd.random()*10) for _ in range(0,rnum)], 9 "d":[int(rd.random()*10) for _ in range(0,rnum)] 10}) 11 12count = testpd.groupby("b").apply(len) 13testpd["e"] = testpd["b"].apply(lambda x: count[x]) 14 15testpd.to_csv("output.csv")

投稿2018/02/10 12:52

編集2018/02/10 12:55
KojiDoi

総合スコア13671

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

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

0

Pythonなど不要。そう、シェル芸ならね!

bash

1$ cat src.csv|sort|uniq -c|awk '$0=$2","$1' > dst.csv

投稿2018/02/10 12:22

編集2018/02/10 12:23
hichon

総合スコア5737

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問