将列添加到pandas数据框中以从其他列中的列表中获取值

时间:2020-05-02 17:43:30

标签: python pandas

我是Python的新手,所以对术语不正确感到抱歉;我搜索了类似的帖子,但没有发现对我的案子有用的信息。 我有一个像这样的数据框:

    Column1     Column2
0   0001        [('A','B'),('C','D'),('E','F')]
1   0001        [('A','B'),('C','D'),('E','F')]
2   0001        [('A','B'),('C','D'),('E','F')]
3   0002        [('G','H'),('I','J')]
4   0002        [('G','H'),('I','J')]

根据Column2列表中包含的元组数,每行被复制n次。 我想做的是添加一个新列,每行仅包含一个元组:

Column1     Column2                             Column2_new
0   0001        [('A','B'),('C','D'),('E','F')]     'A' 'B'
1   0001        [('A','B'),('C','D'),('E','F')]     'C' 'D'
2   0001        [('A','B'),('C','D'),('E','F')]     'E' 'F'
3   0002        [('G','H'),('I','J')]               'G' 'H'
4   0002        [('G','H'),('I','J')]               'I' 'J'

您能帮我吗?

预先感谢您的任何建议

2 个答案:

答案 0 :(得分:2)

我们可以在groupby+cumcount之后做df.lookup

idx = df.groupby('Column1').cumcount()
df['new']= pd.DataFrame(df['Column2'].tolist()).lookup(df.index,idx)

print(df)
   Column1                   Column2     new
0        1  [(A, B), (C, D), (E, F)]  (A, B)
1        1  [(A, B), (C, D), (E, F)]  (C, D)
2        1  [(A, B), (C, D), (E, F)]  (E, F)
3        2          [(G, H), (I, J)]  (G, H)
4        2          [(G, H), (I, J)]  (I, J)

答案 1 :(得分:1)

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %} {{ title }} {% endblock %}</title>
</head>
<body>

或者,您可以使用itertools函数-productchain获取您的数据,并重新连接到原始数据框:

</body>
</html>