-1

私はcsvとして購入データを持っています。

|    Name    |     Sex     |     Week
|------------|-------------|--------------
|   Apple    |      F      |     Mon
|   Orange   |      F      |     Tue
|   Apple    |      M      |     Fri        ...
|   Grape    |      M      |     Mon

変換されたcsvが欲しい...

| Name:Apple | Name:Orange | Name:Grape | Sex:F | Sex:M | Week:Mon | Week:Tue |
|     1      |      0      |     0      |   1   |   0   |    1     |    0     |
|     0      |      1      |     0      |   1   |   0   |    0     |    1     | ...
|     1      |      0      |     0      |   0   |   1   |    0     |    0     |
|     0      |      0      |     1      |   0   |   1   |    1     |    0     |

RまたはPythonには良い変換方法がありますか? ありがとう。

4

1 に答える 1

1

「reshape2」パッケージを使用して R でこれを行う 1 つの方法を次に示します。出力の列の順序を並べ替える必要があります。

data.frameあなたが「mydf」と呼ばれると仮定します:

library(reshape2)
x <- melt(as.matrix(mydf))
dcast(x, Var1 ~ value, fun.aggregate = length, value.var="value")
#   Var1 Apple F Fri Grape M Mon Orange Tue
# 1    1     1 1   0     0 0   1      0   0
# 2    2     0 1   0     0 0   0      1   1
# 3    3     1 0   1     0 1   0      0   0
# 4    4     0 0   0     1 1   1      0   0

私は以前に python や pandas を使用したことがありget_dummiesませんが、必要なことを行う関数があります。

import numpy as np
import pandas as pd
data = {'name': ['apple', 'orange', 'apple', 'grape'],
        'sex': ['F', 'F', 'M', 'M'],
        'week': ['mon', 'tue', 'fri', 'mon']}
frame = pd.DataFrame(data)
print frame


     name sex week
0   apple   F  mon
1  orange   F  tue
2   apple   M  fri
3   grape   M  mon

print pd.get_dummies(frame.unstack().dropna()).groupby(level = 1).sum()

   F  M  apple  fri  grape  mon  orange  tue
0  1  0      1    0      0    1       0    0
1  1  0      0    0      0    0       1    1
2  0  1      1    1      0    0       0    0
3  0  1      0    0      1    1       0    0
于 2013-12-12T11:23:50.123 に答える