python - 如何在pandas python中使用一列(有一个项目列表)制作长格式?

标签 python pandas pandas-melt

我正在使用一个数据框,其中有一列、值和其中的项目列表。

下面是我的数据框:

| uniqId   | DeptId  | Date       | values     |
| -------- | ------- | ---------- | ---------- |
| 1234     | BKNG    | 2023-09-05 | [VGM, FJK] |
| 2534     | FINA    | 2023-09-04 | [GTD, WEH] |
| 3469     | ASKG    | 2023-09-05 | [MUG, PIS] |

我想实现的输出为:

| values_1 | uniqId   | DeptId  | Date       | values     |
| -------- | -------- | ------- | ---------- | ---------- |
| VGM      | 1234     | BKNG    | 2023-09-05 | [VGM, FJK] |
| FJK      | 1234     | BKNG    | 2023-09-05 | [VGM, FJK] |
| GTD      | 2534     | FINA    | 2023-09-04 | [GTD, WEH] |
| WEH      | 2534     | FINA    | 2023-09-04 | [GTD, WEH] | 
| MUG      | 3469     | ASKG    | 2023-09-05 | [MUG, PIS] |
| PIS      | 3469     | ASKG    | 2023-09-05 | [MUG, PIS] |

原始值列保留在数据框中,并创建名为 Values_1 的新列,Values 中列表中的每个项目都作为其自己的列列出,其余数据列保持原样。

有人可以帮我解决这个问题吗?

提前致谢。

我知道可以使用 pandas Melt 或 pandas long 函数,但我不确定如何应用于包含列表的列。 https://www.geeksforgeeks.org/python-pandas-melt/

谢谢!

最佳答案

另一个可能的选择:

out = df.loc[(ser:=df["values"].explode()).index].assign(values_1=ser)

输出:

print(out)

   uniqId DeptId        Date      values values_1
0    1234   BKNG  2023-09-05  [VGM, FJK]      VGM
0    1234   BKNG  2023-09-05  [VGM, FJK]      FJK
1    2534   FINA  2023-09-04  [GTD, WEH]      GTD
1    2534   FINA  2023-09-04  [GTD, WEH]      WEH
2    3469   ASKG  2023-09-05  [MUG, PIS]      MUG
2    3469   ASKG  2023-09-05  [MUG, PIS]      PIS

关于python - 如何在pandas python中使用一列(有一个项目列表)制作长格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77061417/

相关文章:

pandas - Pandas 中的子字符串列基于另一列

python - Pandas reshape /转换数据框

python - 如何按子类别的不同计数对数据框/数据透视表进行排序?

python - Linux CentOS 7,如何设置Python2.7为默认Python版本?

python - 什么时候应该将 Python 脚本拆分为多个文件/模块?

python - 复杂的 Pandas 融化

python - 如何用另一个字符替换字符串特定位置的字符

python - 如何使用两列来区分 Pandas 数据框中的数据点

Python Pandas,仅重采样特定时间