Saya memiliki kerangka data di bawah ini

df = pd.DataFrame({'var1': ['d,e,f', '', np.nan], 'var2': ['1,2', 2, 3]})

Saya mencoba meledakkan semua kolom

df.assign(var1=df['var1'].str.split(',')).explode('var1')

Output saya saat ini di bawah

    var1    var2
0   d        1,2
0   e        1,2
0   f        1,2
1              2
2   NaN        3

Keluaran yang saya harapkan

    var1    var2
0   d        1
0   e        1
0   f        1
0   d        2
0   e        2
0   f        2
1            2
2   NaN      3
  • Saya tidak tahu nama column itu akan berbeda.

  • itu akan berbeda setiap kali dan panjang kolom juga sekarang 2 itu akan meningkat juga

  • bisa kita lakukan iloc ?

0
user14177720 19 November 2020, 20:32

1 menjawab

Jawaban Terbaik

Anda dapat melakukan hal berikut:

df = df.applymap(lambda x: x.split(',') if type(x) == str else x)
for i in range(1, df.shape[1] + 1):
    df = df.explode(df.columns[-i])

Keluaran:

  var1 var2
0    d    1
0    e    1
0    f    1
0    d    2
0    e    2
0    f    2
1         2
2  NaN    3

Opsi lain dengan pemisahan berturut-turut:

for i in range(1, df.shape[1] + 1):
    df[df.columns[-i]] = df[df.columns[-i]].apply(lambda x:
                                                  x.split(',') if type(x) == str else x)
    df = df.explode(df.columns[-i])
0
Timus 20 November 2020, 08:10