简体   繁体   English

Python循环遍历元组列表,从pandas数据框中添加一个值

[英]Python loop through tuple list adding a value from pandas data frame

I am trying to loop through a list of tuples adding a value to the end of each one that corresponds to a value in a column in a pandas data frame.我试图遍历一个元组列表,在每个元组的末尾添加一个值,该值对应于熊猫数据框中列中的一个值。

df1 = [(1,2),(4,5),(8,9)]

df2 = pd.DataFrame({'Alpha': [2, 4, 8],
                    'Beta': ["a","b","c"]})

df3 = []

for i in df1:
    print(i)

for i,j in df2["Beta"], df1:
    j = j + (i,)
    df3.append(j)

print(df3)

I would expect print(df3) to display the following:我希望 print(df3) 显示以下内容:

[(1, 2, 'a'), (4, 5, 'b'), (8, 9, 'c')]

However, I get an error stating too many values to unpack.但是,我收到一个错误,指出要解压缩的值太多。

Use zip , list comprehension solution:使用zip ,列表理解解决方案:

df3 = [j + (i,) for i,j in zip(df2["Beta"], df1)]

Your solution should be changed:您的解决方案应该改变:

for i,j in zip(df2["Beta"], df1):
    j = j + (i,)
    df3.append(j)

print(df3)
[(1, 2, 'a'), (4, 5, 'b'), (8, 9, 'c')] 

One way using a list comprehension would be:使用列表理解的一种方法是:

[(*i, j) for i, j in zip(df1,  df2.Beta)]
# [(1, 2, 'a'), (4, 5, 'b'), (8, 9, 'c')]

Or you could also map with operator.add :或者你也可以用operator.add map

from operator import add
list(map(add, df1, df2.Beta.map(tuple)))
# [(1, 2, 'a'), (4, 5, 'b'), (8, 9, 'c')]

Or working from pandas:或者从熊猫工作:

(pd.Series(df1) + df2.Beta.map(tuple)).values.tolist()
# [(1, 2, 'a'), (4, 5, 'b'), (8, 9, 'c')]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM