2017-10-05 95 views
0

我有一个熊猫数据帧枝条4列从与列名的列值的列表,我想使第五列其是具有4列的元素的列表 例如:使得包括在熊猫

import pandas as pd 
import numpy as np 
df = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD')) 

>>> df 
      A   B   C   D 
0 -0.095531 1.922726 0.333087 0.173920 
1 -2.633423 -0.635973 1.059518 -1.129433 
2 -1.579580 1.088753 0.462434 -0.349215 
3 -0.129472 0.656815 0.191109 -0.631818 
4 -1.977579 -0.559613 0.789966 -0.044518 
5 0.706840 -2.005750 0.327085 1.106847 

我想追加一个柱说E,所以,第一行的样子

[A=-0.095531,B=1.922726,C=0.333087,D=0.173920] 

我想df['E'] = list(df.values),但其产生的运算为 [-0.095531,1.922726,0.333087,0.173920]

+0

你的意思是像' “A = -0.095531”'字符串列表?因为一个原始的'A = -0.095531'不是一个有效的东西放在一个列表中... – Julien

+0

是的,列表中的每个元素可以是一个字符串 – Ssank

+0

然后只需编写2或3行代码来转换为字符串,因为你希望...这并不难,至少试一试。 – Julien

回答

0

对于所有列,我做了df ['A'] =“A =”+ df ['A']。astype(str)等等。然后DF [ 'E'] =名单(df.values),得到所需的运算

0

我认为后续可能会有帮助:

df['E']=list(df.values) 
    df 


     A   B   C   D  E 
0 0.879163 0.078845 -0.678123 1.985986 [0.879162590333, 0.0788449197234, -0.678123390... 
1 2.583740 -0.604236 -1.530671 -0.338767 [2.58373987111, -0.604235978563, -1.5306710724... 
2 -0.435389 -0.654454 -1.170191 -1.829236 [-0.435389198028, -0.65445422574, -1.170190542... 
3 -0.009336 -0.582220 0.177863 -0.014115 [-0.00933610605622, -0.582219961202, 0.1778632... 
4 -2.044836 0.519311 1.626044 -0.303060 [-2.0448364492, 0.51931139324, 1.62604416428, ... 
5 -1.244811 0.253653 0.450925 -0.410422 [-1.24481148127, 0.253652735816, 0.45092490489... 
0

不知道这是怎么用的!但是,你走了。

df.assign(
    E=df.applymap(
     '{: 5.2f}'.format 
    ).radd(df.columns.to_series() + '=').values.tolist() 
) 

      A   B   C   D          E 
0 -0.095531 1.922726 0.333087 0.173920 [A=-0.10, B= 1.92, C= 0.33, D= 0.17] 
1 -2.633423 -0.635973 1.059518 -1.129433 [A=-2.63, B=-0.64, C= 1.06, D=-1.13] 
2 -1.579580 1.088753 0.462434 -0.349215 [A=-1.58, B= 1.09, C= 0.46, D=-0.35] 
3 -0.129472 0.656815 0.191109 -0.631818 [A=-0.13, B= 0.66, C= 0.19, D=-0.63] 
4 -1.977579 -0.559613 0.789966 -0.044518 [A=-1.98, B=-0.56, C= 0.79, D=-0.04] 
5 0.706840 -2.005750 0.327085 1.106847 [A= 0.71, B=-2.01, C= 0.33, D= 1.11] 

按照您的要求的文字:

df.assign(
    E=df.astype(str).radd(df.columns.to_series() + '=').values.tolist()) 

      A   B   C   D             E 
0 -0.095531 1.922726 0.333087 0.173920 [A=-0.095531, B=1.922726, C=0.333087, D=0.17392] 
1 -2.633423 -0.635973 1.059518 -1.129433 [A=-2.633423, B=-0.635973, C=1.059518, D=-1.12... 
2 -1.579580 1.088753 0.462434 -0.349215 [A=-1.57958, B=1.088753, C=0.462434, D=-0.349215] 
3 -0.129472 0.656815 0.191109 -0.631818 [A=-0.129472, B=0.656815, C=0.191109, D=-0.631... 
4 -1.977579 -0.559613 0.789966 -0.044518 [A=-1.977579, B=-0.559613, C=0.789966, D=-0.04... 
5 0.706840 -2.005750 0.327085 1.106847 [A=0.70684, B=-2.00575, C=0.327085, D=1.106847]