0

IPythonでワンライナーを実行しようとしていますが、SyntaxError: invalid syntax. コードは次のとおりです。

 for zzz in ddd.index: zzz1 = zzz.split('///'); zzz3 = [zzz2.strip() for zzz2 in zzz1 if len(zzz1) > 1]; for zzz4 in zzz3: ddd.ix[zzz4]['Class'] = ddd.ix[zzz]['Class']; del ddd.ix[zzz]

次のように説明できます: DataFrame のインデックスの値ごとに、セパレータとしてddd使用して分割します。///次に、複数の値が返された場合は、値ごとに行を作成し、元の行を削除します。例では:

             Class
lal          1
eri /// iii  2
aks          3

入手したい

             Class
lal          1
eri          2
iii          2
aks          3

最初の列 (`lal'、'eri'、...) はデータフレームのインデックスです。

どうすればこれを達成できますか?ドキュメントを検索しましたが、その方法を管理できませんでした。

ありがとう

4

2 に答える 2

2

ここで何をしようとしているのかわからない。

In [13]: df
Out[13]: 
             A  B
0          lal  1
1  eri /// iii  2
2          aks  3

これを行うための恐ろしく長い式を次に示します。良いニュースは、これがかなり速くなるということです。

In [56]: split = df['A'].str.split('\s+\/\/\/\s+').apply(Series)

In [57]: split
Out[57]: 
     0    1
0  lal  NaN
1  eri  iii
2  aks  NaN

In [58]: indexed = split.unstack().dropna()

In [59]: indexed
Out[59]: 
0  0    lal
   1    eri
   2    aks
1  1    iii
dtype: object

 In [61]: grouped = indexed.groupby(level=1).apply(
           lambda x: Series(x.values,index=list(x.index.get_level_values(1))))

In [62]: grouped
Out[62]: 
0  0    lal
1  1    eri
   1    iii
2  2    aks
dtype: object

In [63]: grouped.reset_index().set_index('level_1')
Out[63]: 
         level_0    0
level_1              
0              0  lal
1              1  eri
1              1  iii
2              2  aks
于 2013-10-24T14:47:42.673 に答える