根据某些条件将单元格值转换为数据框中的数组

时间:2020-05-15 07:57:44

标签: python pandas

我的数据框如下

const fs = require("fs");

fs.writeFile("hello?world.txt", "Hello World!", (error) => {
    if (error) {
        console.error("An error occurred:", error);
    } else {
        console.log("Task completed!");
    }
});

我想按如下方式进行变换

+--------------------+
| 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]

1 个答案:

答案 0 :(得分:1)

使用DataFrame.pivot并将丢失的值替换为空字符串,然后将行转换为列表,并在range和{{1}的最大值之间添加1index }:

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]