0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DataFrameの行を重複なしで組合せる

Last updated at Posted at 2021-10-01

データセット、例えば3つの特性からなる5回分の試験データがあったとして、5回分の試験データを重複なしで組み合わせて平均をとるなりの処理をしたいときの方法をメモします。

まず、サンプルデータを作ります。乱数で5行3列を作成しています。random.seedを設定することで、毎回同じ乱数になります。

import numpy as np
import pandas as pd

np.random.seed(seed=1)
df = pd.DataFrame(np.random.rand(5, 3),
                  columns=['sy', 'su', 'elong'],
                  index=['a', 'b', 'c', 'd', 'e'])

dfの中身はつぎのようになります。

         sy        su        el
a  0.131750  0.469233  0.032909
b  0.433968  0.014887  0.557556
c  0.611954  0.148562  0.172844
d  0.166242  0.230893  0.703038
e  0.965665  0.492269  0.537133

a〜eの5行を重複なしで組み合わせる、すなわち、5つの中から2つ取り出す場合、5つの中から3つ取り出す場合、5つの中から4つ取り出す場合、5つの中から5つ取り出す場合のすべてに対して何らかの計算をしたい場合には、itertoolsのcombinationsを使うと上手く行きました。

import itertools

n = len(df)
combinations = []
for i in range(2, n+1):
    combinations += list(itertools.combinations(df.T, i))

これで、combinationsはデータフレームの列のidの組合せのタプルになります。df.Tとして転地しておくことで、もとの行、すなわち試験データセットの組合せとなります。combinationsの中身はつぎのようになります。

[('a', 'b'), ('a', 'c'), ('a', 'd'), ('a', 'e'), ('b', 'c'), ('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e'), ('d', 'e'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'b', 'e'), ('a', 'c', 'd'), ('a', 'c', 'e'), ('a', 'd', 'e'), ('b', 'c', 'd'), ('b', 'c', 'e'), ('b', 'd', 'e'), ('c', 'd', 'e'), ('a', 'b', 'c', 'd'), ('a', 'b', 'c', 'e'), ('a', 'b', 'd', 'e'), ('a', 'c', 'd', 'e'), ('b', 'c', 'd', 'e'), ('a', 'b', 'c', 'd', 'e')]

dataframeから特定の要素を抽出するには、df.loc[]で配列を渡してやればいいです。combinationsはタプルなので、まず配列に変換して、df.locに渡してやります。例えば1番最初の組合せを取り出すには、以下のようになります。

x = list(combinations[0])
df2 = df.loc[x]

df2の中身は出力はつぎのようになります。

         sy        su        el
a  0.131750  0.469233  0.032909
b  0.433968  0.014887  0.557556

あとは、それぞれの組み合わせで取り出したDataFrameに対して、お好みの処理を行います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?