Saya memiliki bingkai data 8 kolom dan ingin memiliki bingkai data lain dengan 2 kolom. Nilai dalam 2 kolom tersebut dihitung dari 8 nilai asli.

Apakah mungkin dilakukan dengan apply atau transform?

Contoh:

jnd = pd.DataFrame(np.random.rand(18, 8))

def appl(s):
    """particular processing is not important, only shapes matter.
       Therefore just randomly select 2 of passed values"""
    return np.random.choice(s, size=2)

jnd.apply(appl, axis=1)

Ini menimbulkan

ValueError: Shape of passed values is (18, 2), indices imply (18, 8)

Hal yang sama untuk transform.

1
wl2776 1 Desember 2017, 14:27

1 menjawab

Jawaban Terbaik

Anda dapat mengonversi output ke Series dengan indeks yang membuat nama kolom baru:

def appl(s):
    """particular processing is not important, only shapes matter.
       Therefore just randomly select 2 of passed values"""
    return pd.Series(np.random.choice(s, size=2), index=['a','b'])

print(jnd.apply(appl, axis=1))
           a         b
0   0.095437  0.256290
1   0.251450  0.072835
2   0.755617  0.630932
3   0.667163  0.449646
4   0.581908  0.341653
5   0.767170  0.376034
6   0.226523  0.120946
7   0.537986  0.385240
8   0.727680  0.998355
9   0.727728  0.308487
10  0.808792  0.286342
11  0.481634  0.767650
12  0.540303  0.106239
13  0.976599  0.640354
14  0.062515  0.062515
15  0.892971  0.856905
16  0.111959  0.526366
17  0.344646  0.268620
1
jezrael 1 Desember 2017, 11:28