首页 > 解决方案 > 使用python组合来自2行的值

问题描述

我有一个在 excel 中看起来像这样的二维数组数据:

01-Jan-1990 0:00:01 A abcdefghi jklmnopq
01-Jan-1990 0:00:02 A abcdefghi xxxyyyvvv fefwwe qqqqq
01-Jan-1990 0:00:02   xwwwww xxxxxxx yyyy
01-Jan-1990 0:00:05 B qwerty qwerty
01-Jan 1990 0:00:06 C popopop qwqwqwq tytytyty sss

在数据中,

[['01-Jan-1990 0:00:01','A','abcdefghi jklmnopq'],
 ['01-Jan-1990 0:00:02','A','abcdefghi xxxyyyvvv fefwwe qqqqq'],
 ['01-Jan-1990 0:00:02','\t','xwwwww xxxxxxx yyyy'],      #\t instead of empty
 ['01-Jan-1990 0:00:05','B','qwerty qwerty'],
 ['01-Jan 1990 0:00:06','C','popopop qwqwqwq tytytyty sss']]

想问是否有任何方法可以将第 3 行的值组合到第 2 行没有的字符串中A,B,C

所需的输出如下:

01-Jan-1990 0:00:01 A abcdefghi jklmnopq
01-Jan-1990 0:00:02 A abcdefghi xxxyyyvvv fefwwe qqqqq xwwwww xxxxxxx yyyy
01-Jan-1990 0:00:05 B qwerty qwerty
01-Jan 1990 0:00:06 C popopop qwqwqwq tytytyty sss

用期望的输出和缺少的字段编辑

标签: pythondata-processing

解决方案


假设您的数据存储在 variable 中data,您可以使用itertools.groupby子列表的第一项对子列表进行分组,然后使用str.join空格将每个组的最后一项连接起来:

from itertools import groupby
from operator import itemgetter
[[*l[0][:-1], ' '.join(m for *_, m in l)] for k, g in groupby(data, key=itemgetter(0)) for l in (list(g),)]

这将返回:

[['01-Jan-1990 0:00:01', 'A', 'abcdefghi jklmnopq'],
 ['01-Jan-1990 0:00:02', 'A', 'abcdefghi xxxyyyvvv fefwwe qqqqq xwwwww xxxxxxx yyyy'],
 ['01-Jan-1990 0:00:05', 'B', 'qwerty qwerty'],
 ['01-Jan 1990 0:00:06', 'C', 'popopop qwqwqwq tytytyty sss']]

推荐阅读