Python Pandas:将不同长度的列表作为一行分配给pandas数据框

时间:2019-07-05 12:26:53

标签: python pandas

嗨,我有一个这样的数据框:

 ColA  ColB  
 a      0     
 b      1
 c      2     

我想将list_a = [0,1]附加到列A == a和 将list_c = [0,1,2]附加到列A == c。 Final应该看起来像这样:

 ColA  ColB  
 a      0     0     1    Nan
 b      1     Nan   Nan  Nan
 c      2     0     1     2 

我该怎么做?谢谢。

2 个答案:

答案 0 :(得分:2)

您可以将lists构造为DataFrameconcat

(pd.concat([df.set_index('ColA'),
            pd.DataFrame([list_a, list_c], index=['a', 'c'])],
           axis=1).rename_axis('ColA').reset_index())

[出]

  ColA  ColB    0    1    2
0    a     0  0.0  1.0  NaN
1    b     1  NaN  NaN  NaN
2    c     2  0.0  1.0  2.0

或者按照@QuangHoang的建议,使用DataFrame.merge

df.merge(pd.DataFrame([list_a, list_c], index=['a', 'c']),
         left_on='ColA',
         right_index=True,
         how='left')

答案 1 :(得分:0)

import pandas as pd

df = pd.DataFrame([['a',0],['b',1],['c',2]], columns= ['A','B'])

 def compar_func(x):
     if x == 'a':
        return [0,1]
     elif x == 'c':
         return [0,1,2]
     else:
         return ''

 df1= pd.DataFrame(df['A'].apply(compar_func).values.tolist())

 pd.concat([df, df1], axis = 1)

 #o/P
    A  B    0    1  2
  0 a  0    0.0 1.0 NaN
  1 b  1    NaN NaN NaN
  2 c  2    0.0 1.0 2.0