8

21 列の pandas データフレームがあります。各行に固有の 6 を除いて、まったく同じ列データ値を持つ行のサブセットに注目しています。これらの 6 つの値がアプリオリに対応する列見出しはわかりません。

各行を Index オブジェクトに変換してみ、2 つの行に対して set 操作を実行しました。元。

row1 = pd.Index(sample_data[0])
row2 = pd.Index(sample_data[1])
row1 - row2 

これは、row1 に固有の値を含む Index オブジェクトを返します。次に、どの列に一意の値があるかを手動で推測できます。

初期データフレームでこれらの値が対応する列見出しをプログラムで取得するにはどうすればよいですか? または、2 つまたは複数のデータフレーム行を比較し、各行の 6 つの異なる列の値と対応する見出しを抽出する方法はありますか? 理想的には、一意の列を持つ新しいデータフレームを生成するとよいでしょう。

特に、集合演算を使用してこれを行う方法はありますか?

ありがとうございました。

4

3 に答える 3

8

最初の 2 行が異なる列のみを返す簡単な解決策を次に示します。

In [13]: df = pd.DataFrame(zip(*[range(5), list('abcde'), list('aaaaa'),
...                              list('bbbbb')]), columns=list('ABCD'))

In [14]: df
Out[14]: 
   A  B  C  D
0  0  a  a  b
1  1  b  a  b
2  2  c  a  b
3  3  d  a  b
4  4  e  a  b

In [15]: df[df.columns[df.iloc[0] != df.iloc[1]]]
Out[15]: 
   A  B
0  0  a
1  1  b
2  2  c
3  3  d
4  4  e

フレーム全体で複数の一意の値を持つすべての列を見つけるソリューション。

In [33]: df[df.columns[df.apply(lambda s: len(s.unique()) > 1)]]
Out[33]: 
   A  B
0  0  a
1  1  b
2  2  c
3  3  d
4  4  e
于 2013-05-14T02:20:25.557 に答える