gpt4 book ai didi

python - 如何从 pandas 中的列创建唯一 ID 列表,其中 ID 列表在 Python 中被称为字符串

转载 作者:行者123 更新时间:2023-11-28 18:10:07 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框 df

import pandas as pd

lst = [23682, 21963, 9711, 21175, 13022,1662,7399, 13679, 17654,4567,23608,2828, 1234]

lst_match = ['[21963]','[21175]', '[1662 7399 13679 ]','[17654 23608]','[2828]','0','0','0','0','0','0', '0','0' ]

df = pd.DataFrame(list(zip(lst, lst_match)),columns=['ID','ID_match'])

df

       ID            ID_match
0 23682 [21963]
1 21963 [21175]
2 9711 [1662 7399 13679]
3 21175 [17654 23608]
4 13022 [2828]
5 1662 0
6 7399 0
7 13679 0
8 17654 0
9 4567 0
10 23608 0
11 2828 0
12 1234 0

ID_match 列中的值虽然是字符串格式的列表,但也是 ID。

我想创建一个唯一 ID 的数据框,这样我的唯一 ID 框应该包含 ID_match 列中具有非 0 值的所有 ID 以及 ID_match 列中提到的那些 ID。

所以我的唯一 ID 输出数据框必须如下所示:

       ID           
0 23682
1 21963
2 9711
3 21175
4 13022
5 1662
6 7399
7 13679
8 17654
9 23608
10 2828

如何使用 python pandas 执行此操作?

最佳答案

使用:

s = (df[df['ID_match'] != '0']
.set_index('ID')['ID_match']
.str.strip('[ ]')
.str.split('\s+', expand=True)
.stack())
print (s)
23682 0 21963
21963 0 21175
9711 0 1662
1 7399
2 13679
21175 0 17654
1 23608
13022 0 2828
dtype: object


vals = s.index.get_level_values(0).to_series().append(s.astype(int)).unique()
df = pd.DataFrame({'ID':vals})
print (df)
ID
0 23682
1 21963
2 9711
3 21175
4 13022
5 1662
6 7399
7 13679
8 17654
9 23608
10 2828

解释:

  1. 首先通过boolean indexing过滤掉所有非0
  2. set_indexID 列创建索引
  3. 使用 strip 删除尾随 [ ]
  4. split值(value)和 reshape stack

  5. 然后通过 get_level_values 获得第一级 MultiIndex并转换 to_series

  6. > append系列 s 转换为 integers
  7. 获取unique值和最后一次调用 DataFrame 构造函数

关于python - 如何从 pandas 中的列创建唯一 ID 列表,其中 ID 列表在 Python 中被称为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com