Pandas循环列的值

2024-05-16 13:12:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,其中一列的值是列表。我想将两个元素逐个组合,然后输出到另一个数据帧。
例如,我有一个dataframe df,它包含col_a和{}。col_b的值是列表。我想循环df.col_b的值,输出成对的列表。在

import pandas as pd

df=pd.DataFrame({'col_a':['ast1','ast2','ast3'],'col_b':[['text1','text2','text3'],['mext1','mext2','mext3'],['cext1','cext2']]})
df

    col_a   col_b
0   ast1    [text1, text2, text3]
1   ast2    [mext1, mext2, mext3]
2   ast3    [cext1, cext2]

我想要这个:

^{pr2}$

Tags: 数据pandasdf列表colpdtext1text2
2条回答

假设您的col_a每行有唯一的值,您可以使用combinationsfrom{}来生成列表元素的所有两个组合:

from itertools import combinations
(df.groupby('col_a')['col_b']
   .apply(lambda x: pd.Series(list(combinations(x.iloc[0], 2))))
   .reset_index(level = 0))

#  col_a            col_b
#0  ast1    (text1, text2)
#1  ast1    (text1, text3)
#2  ast1    (text2, text3)
#0  ast2    (mext1, mext2)
#1  ast2    (mext1, mext3)
#2  ast2    (mext2, mext3)
#0  ast3    (cext1, cext2)

{cd1>您可以使用

import itertools
series = df["col_b"].apply(lambda x: \
    pd.Series(list(itertools.combinations(x,2)))).stack()

序列必须具有可与“母亲”数据帧合并的名称:

^{pr2}$

现在,合并两个数据对象并选择所需的列:

result = df.merge(pd.DataFrame(series).reset_index(),
    left_index=True,
    right_on="level_0")[["col_a","col_b_1"]]

结果是一列元组;如果这不是正常的,.apply()函数list()。在

^{4}$

相关问题 更多 >