我有一个列表数据框,看起来与下面的类似(图a)。有一个键列,后跟包含列表的n列。我的目标是,对于每一行,我将把每列的列表(不包括键)合并到新列 中的单个列表中combined。我想要的结果的一个例子如下图 B 所示。
我已经尝试了一些使用 iteritems() 的方法,但是这些数据帧可能有数十万到数百万行长,这使得它非常慢。所以我试图避免使用它的解决方案。
我想使用类似这篇 SO post中看到的列表理解之类的东西,但我无法让它与 pandas 一起使用。
# example data
data = {'key': ['1_1', '1_2', '1_3'],
'valueA': [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]],
'valueB': [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]],
'valueN': [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]]}
dataSet = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
图A
图B
编辑:我真的很感谢到目前为止我得到的所有答案!我目前正在对我的全尺寸数据集进行检查并计时,以便我可以找出在这种情况下哪个最有效。我很快就会更新我的结果!
编辑 2:我在一些较大的数据集上测试了此处提供的主要解决方案,它们的平均时间如下。
# Lambda/Apply a nested list comprehension
shakiba.mrd: 1.12 s
# Sum columns
jfaccioni: 2.21 s
# Nested list comprehension with iterrows
mozway: 0.95 s
# Adding column lists together
politinsa: 3.50 s
Run Code Online (Sandbox Code Playgroud)
再次感谢大家的贡献!
您可以在 python 中添加列表
df['combined'] = df['valueA'] + df['valueB'] + df['valueN']
Run Code Online (Sandbox Code Playgroud)
或者对于多列:
df['combined'] = [[] for _ in range(len(df))]
for letter in ['A', 'B', 'C', ...., 'N']:
df['combined'] += df[f'value{letter}']
Run Code Online (Sandbox Code Playgroud)
您可以使用嵌套列表理解:
\ndataSet['combined'] = [[e for l in x for e in l]\n for _,x in dataSet.filter(like='value').iterrows()]\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n key valueA valueB valueN combined\n0 1_1 [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]\n1 1_2 [7, 8, 9, 10, 11, 12] [7, 8, 9, 10, 11, 12] [7, 8, 9, 10, 11, 12] [7, 8, 9, 10, 11, 12, 7, 8, 9, 10, 11, 12, 7, 8, 9, 10, 11, 12]\n2 1_3 [13, 14, 15, 16, 17, 18] [13, 14, 15, 16, 17, 18] [13, 14, 15, 16, 17, 18] [13, 14, 15, 16, 17, 18, 13, 14, 15, 16, 17, 18, 13, 14, 15, 16, 17, 18]\nRun Code Online (Sandbox Code Playgroud)\n重复添加的时间比较(100行,100列,每个列表1000个项目):
\n# repeated addition of the lists\n8.66 s \xc2\xb1 309 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\n\n# nested list comprehension\n729 ms \xc2\xb1 285 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |