首页 > 解决方案 > 将多列合并为一列作为python pandas中的列表

问题描述

如何创建一个新列 [ColumnA] 并将数据存储为列表而不是字符串?我需要使用 REST API POST 方法基于索引循环数据以供稍后处理。

            Column1  Column2  Column3  Column4  ColumnA
    Index
0       a        1        2        3        4  [1,2,3,4]
1       a        3        4        5      NaN    [3,4,5]
2       b        6        7        8      NaN    [6,7,8]
3       c        7        7      NaN      NaN      [7,7]

标签: pandas

解决方案


输入数据中没有清除MultiIndexIndex输入数据,因此级别数按以下方式计算range

df['ColumnA'] = df.stack().astype(int).groupby(level=list(range(df.index.nlevels))).agg(list)
print (df)
         Column1  Column2  Column3  Column4       ColumnA
  Index                                                  
0 a            1        2      3.0      4.0  [1, 2, 3, 4]
1 a            3        4      5.0      NaN     [3, 4, 5]
2 b            6        7      8.0      NaN     [6, 7, 8]
3 c            7        7      NaN      NaN        [7, 7]

或者:

df['ColumnA'] = df.apply(lambda x: x.dropna().astype(int).tolist(), axis=1)

如果有空字符串:

print (df)
         Column1  Column2 Column3 Column4
  Index                                  
0 a            1        2     3.0     4.0
1 a            3        4     5.0        
2 b            6        7     8.0        
3 c            7        7               

df['ColumnA'] = df.apply(lambda x: x[x!= ''].astype(int).tolist(), axis=1)

print (df)
         Column1  Column2 Column3 Column4       ColumnA
  Index                                                
0 a            1        2     3.0     4.0  [1, 2, 3, 4]
1 a            3        4     5.0             [3, 4, 5]
2 b            6        7     8.0             [6, 7, 8]
3 c            7        7                        [7, 7]

推荐阅读