web-dev-qa-db-ja.com

Pandas-列の値を新しい列のリストに結合する

Python Pandasデータフレームdf:

d=[['hello',1,'GOOD','long.kw'],
   [1.2,'chipotle',np.nan,'bingo'],
   ['various',np.nan,3000,123.456]]                                                    
t=pd.DataFrame(data=d, columns=['A','B','C','D']) 

次のようになります:

print(t)
         A         B     C        D
0    hello         1  GOOD  long.kw
1      1.2  chipotle   NaN    bingo
2  various       NaN  3000  123.456

listAB、およびCの値のDである新しい列を作成しようとしています。したがって、次のようになります。

t['combined']                                             

Out[125]: 
0        [hello, 1, GOOD, long.kw]
1        [1.2, chipotle, nan, bingo]
2        [various, nan, 3000, 123.456]
Name: combined, dtype: object

私はこのコードを試しています:

t['combined'] = t.apply(lambda x: list([x['A'],
                                        x['B'],
                                        x['C'],
                                        x['D']]),axis=1)    

これはこのエラーを返します:

ValueError: Wrong number of items passed 4, placement implies 1 

私が困惑しているのは、リストに追加したい列の1つを削除する(または、リストに追加しないデータフレームに別の列を追加する)と、コードが機能することです。

たとえば、次のコードを実行します。

t['combined'] = t.apply(lambda x: list([x['A'],
                                        x['B'],
                                        x['D']]),axis=1)      

3列のみが必要な場合に最適なこれを返します。

print(t)
         A         B     C        D                 combined
0    hello         1  GOOD  long.kw      [hello, 1, long.kw]
1      1.2  chipotle   NaN    bingo   [1.2, chipotle, bingo]
2  various       NaN  3000  123.456  [various, nan, 123.456]

データフレーム内のすべての列で「結合」リストを作成するように要求するとエラーが発生するが、「結合」リストを作成するために1列を除くすべてを選択すると、リストが期待どおりに作成される理由が完全に失われています。

10
clg4

これを試して :

t['combined']= t.values.tolist()

t
Out[50]: 
         A         B     C        D                       combined
0    hello         1  GOOD  long.kw      [hello, 1, GOOD, long.kw]
1     1.20  chipotle   NaN    bingo    [1.2, chipotle, nan, bingo]
2  various       NaN  3000   123.46  [various, nan, 3000, 123.456]
15
Steven G