You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效从Pandas列表列生成连续元素对新列?

问题描述

我有一个包含如下数据的Pandas DataFrame:

d = {'id': [1, 2, 3, 4, 5],
     'value': [['Red', 'Blue', 'Yellow'],
               ['Blue', 'Yellow', 'Orange'],
               ['Green', 'Purple', 'Yellow', 'Red'],
               ['Violet', 'Blue', 'Green', 'Red', 'Brown'],
               ['Blue', 'Green']]}

df = pd.DataFrame(data = d)

希望将value列中的字符串列表拆分为连续的两两组合,生成如下形式的新DataFrame:

d = {'value': [['Red', 'Blue'],
               ['Blue', 'Yellow'],
               ['Blue', 'Yellow'],
               ['Yellow', 'Orange'],
               ['Green', 'Purple'],
               ['Purple', 'Yellow'],
               ['Yellow', 'Red'],
               ['Violet', 'Blue'],
               ['Blue', 'Green'],
               ['Green', 'Red'],
               ['Red', 'Brown'],
               ['Blue', 'Green']]}

df = pd.DataFrame(data = d)

我尝试用apply(lambda x:)方法实现,但该方法仅返回每个列表的第一对元素:

def splitter(row):
    for first, second in zip(row, row[1:]):
        return [first, second]

pairs_list = df.value.apply(lambda x: splitter(x))

我知道可以用iterrows()循环实现,但想了解更高效的方法。

高效实现方案

方案1:修改apply逻辑+explode展开

你的问题出在splitter函数里的return语句——每次循环到第一对就直接返回了,所以只得到第一个组合。修改函数让它返回当前列表的所有连续对,再用explode把列表拆成单行即可:

def splitter(row):
    # 用列表推导式生成所有连续两两组合
    return [[first, second] for first, second in zip(row, row[1:])]

# 生成包含所有组合的列表列,再展开为单行
result_df = df['value'].apply(splitter).explode().to_frame(name='value')

这种方法比iterrows()高效,因为apply结合列表推导式是批量处理逻辑,explode是Pandas内置的高效展开方法,避免了逐行循环的开销。

方案2:全向量化操作(适合大型数据集)

如果你的数据集规模较大,推荐用完全向量化的方式,彻底避开apply:

# 先把每个列表拆成单行,保留原始id的关联
exploded = df.explode('value').reset_index(drop=True)
# 生成每个元素和下一个元素的配对
pairs = pd.concat([exploded['value'], exploded['value'].shift(-1)], axis=1)
# 过滤掉每个原始列表的最后一行(因为没有下一个元素)
group_ids = df['id'].repeat(df['value'].str.len())
last_rows = exploded.groupby(group_ids).tail(1).index
pairs = pairs.drop(last_rows)
# 把两列合并为列表格式
result_df = pairs.apply(list, axis=1).to_frame(name='value')

这种方法利用Pandas的向量化API处理,在数据量较大时性能优势明显。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:05:30