如何按行压缩两个元组列表?
Posted
技术标签:
【中文标题】如何按行压缩两个元组列表?【英文标题】:How to zip two lists of tuples by row? 【发布时间】:2019-06-16 00:58:39 【问题描述】:我有两个这样的列表:
list1 = ['id':'1','id2':'2','id':'2','id2':'3']
list2 = ['fname':'a','lname':'b','fname':'c','lname':'d']
如何将列表组合成一组用于 pandas 数据框的元组?
像这样:
final_list = ['id':'1','id2':'2','fname':'a','lname':'b','id':'2','id2':'3','fname':'c','lname':'d']
数据框应如下所示:
id id2 fname lname
1 2 a b
2 3 c d
到目前为止尝试过:
final_list = list(zip(list1,list2))
df = pd.DataFrame(final_list)
df:
0 1
[nested_data] [nested_data]
【问题讨论】:
到目前为止你有什么尝试? :) @IMCoins 用我尝试的方法进行了编辑 我认为问题中的术语可以为未来的用户改进。元组是一种内置的 Python 数据类型,在这个问题中不存在(您是指字典吗?还是您指的是配对数据结构?) 【参考方案1】:你应该这样做pd.concat。
根据文档,@jpp 的答案似乎在性能方面更好。我更倾向于相信基准,但老实说,我相信pandas documentation。
import pandas as pd
df = pd.DataFrame(list1)
df2 = pd.DataFrame(list2)
result_df = pd.concat([df, df2], axis=1)
#result_df
# id id2 fname lname
#0 1 2 a b
#1 2 3 c d
【讨论】:
为什么按照@jpp 的建议使用 concat vs join? @RustyShackleford,concat
可扩展为超过 2 个数据帧。如果您只有 2 个数据帧,concat
和 join
或多或少是等效的(join
稍微快一点,但可能不会成为您的瓶颈)。
查看我的编辑,但是是的,他说的 + 我会说如果你追求性能,加入会更好。【参考方案2】:
“纯”Python 答案(即没有 Pandas):
[**x[0], **x[1] for x in zip(list1, list2)]
> ['id': '1', 'id2': '2', 'fname': 'a', 'lname': 'b',
'id': '2', 'id2': '3', 'fname': 'c', 'lname': 'd']
由 Scott Boston 编辑
pd.DataFrame([**x[0], **x[1] for x in zip(list1, list2)])
输出:
fname id id2 lname
0 a 1 2 b
1 c 2 3 d
【讨论】:
将其包装在 pd.DataFrame,pd.DataFrame([**x[0], **x[1] for x in zip(list1, list2)])
中,您将获得 OP 预期输出。【参考方案3】:
你可以使用pd.DataFrame.join
:
df = pd.DataFrame(list1).join(pd.DataFrame(list2))
print(df)
id id2 fname lname
0 1 2 a b
1 2 3 c d
【讨论】:
正是我想要的!以上是关于如何按行压缩两个元组列表?的主要内容,如果未能解决你的问题,请参考以下文章