首页 > 解决方案 > 根据特定条件将单元格值转换为数据框中的数组

问题描述

我的数据框如下

+--------------------+
| id | index | value |
|----|-------|-------|
| A  | 1     | abc   |
| B  | 1     | def   |
| B  | 2     | abc   |
| B  | 4     | ghi   |
| C  | 2     | jkl   |
| C  | 4     | abc   |
| D  | 4     | def   |
|----|-------|-------|

我想将其转换如下

+------------------------+
| id | array             |
|----|-------------------|
| A  | [abc, , , ]       |
| B  | [def, abc, , ghi] |
| C  | [ , jkl, , abc]   |
| D  | [ , , , def]      |
|----|-------------------|

index数组的长度等于我想array[index-1]用列中的字符串填充的value列中的最大值

标签: pythonpandas

解决方案


使用DataFrame.pivotwith 将缺失值替换为空字符串,然后将行转换为列表,还添加withDataFrame.reindex和最大值:range1index

df1 = (df.pivot('id','index','value')
         .fillna('')
         .reindex(range(1, df['index'].max() + 1), axis=1, fill_value='')
         .apply(list, 1)
         .reset_index(name='array'))
print (df1)
  id              array
0  A        [abc, , , ]
1  B  [def, abc, , ghi]
2  C     [, jkl, , abc]
3  D        [, , , def]

推荐阅读