将不同列中的值合并为python列表中的一个

Posted

技术标签:

【中文标题】将不同列中的值合并为python列表中的一个【英文标题】:Merging values in different columns into one in python list 【发布时间】:2016-05-24 06:20:29 【问题描述】:

我有一个类似下面的列表。

Gamecode    rush    pass
23....89     347    
23....89             650
23....90     654    
23....90             230

代码如下。

temp = 
for row in combineddff.itertuples():
    temp=
    if row[1] in ('RUSH', 'PASS'):
        temp['GameCode'] =  row[0]
        if row[1] == 'RUSH':
            temp['rush'] = row[10]
        else:
             temp['pass'] = row[10]

    else:
        continue
    templist.append(temp)

print templist
my_df = pd.DataFrame(templist)
my_df.to_csv('data/results_yards.csv', index=False, header=False)

我想将 templist 中不同行的 rush 和 pass 值合并为一行,其中“GameCode”、“Rush”和“Pass”作为值。请帮忙。

【问题讨论】:

在问题中提供信息。不在链接中,绝对不使用图片。 我明白了。对不起。我现在应该使用这个帖子,还是创建一个新帖子? 编辑这篇文章。并提供创建最小、完整且可验证的示例所需的所有信息。更好的是 - 自己创建一个并分享它,这样人们就会有动力帮助你:***.com/help/mcve 【参考方案1】:

尝试使用 pd.merge 方法:

import pandas as pd

rush = pd.DataFrame('Gamecode': [2389, 2390], 'rush': [347, 654])
pss = pd.DataFrame('Gamecode': [2389, 2390], 'pass': [650, 230])

print(pd.merge(rush, pss, on='Gamecode'))

输出:

   Gamecode  rush  pass
0      2389   347   650
1      2390   654   230

【讨论】:

它们不属于单独的数据框。 Templist 是一个列表,它们属于单独的行,因为 rush 值存在于一行中,而传递值存在于另一行中(如您在我提供的示例列表中所见)。这可能是因为我上面的代码。或者你想让我把它们分开然后合并? 如果您提供几行代表“combineddff”数据框,会更容易为您提供帮助。但是没有这些信息并遵循您的逻辑,我认为拥有两个不同的数据框并将它们合并会更容易。 我明白了。我应该这样做的。现在它不允许我在这里添加我的数据框的头部。有什么办法可以在这里添加吗?感谢您的帮助! @GowrisankarGopalakrishnan,您可以在互联网上发布带有数据框(输入数据)的 文本 文件,以便其他具有较高声誉的用户可以将其添加到您的问题中【参考方案2】:

如果没有价值,我假设您的列是“无”。

game_code = 'GameCode'
pass_yds = 'PASS'
rush_yds = 'RUSH'

output_list = []
for row in combineddff.itertuples():
    if row[0] == game_code:
        if row[2] is not None: pass_yds = row[2]
        if row[1] is not None: rush_yds = row[1]
    else:
        output = (game_code, pass_yds, rush_yds)
        output_list.append(output)

# Flush the last group
output = (game_code, pass_yds, rush_yds)
output_list.append(output)

编辑:在 cmets 之后

templist = [
     'GameCode': 'A', 'PASS': '1' ,
     'GameCode': 'A', 'RUN': '2' ,
     'GameCode': 'B', 'PASS': '3' ,
     'GameCode': 'B', 'RUN': '4' ,
]

merged = None
output_list = []

for t in templist:
    if merged is None:
        merged = t
    elif merged['GameCode'] == t['GameCode']:
        merged.update(t)
    else:
        output_list.append(merged)
        merged = t

【讨论】:

这就是我一直在寻找的。只有这样,我不想使用combineddff.itertuples(),而是想使用我原来帖子中的templist。在这里,我得到 keyerror @ if row[0] == game_code:, 如果我使用 templist 而不是 combinedff.itertuples() 您的templist 是否包含元组、列表或字典?如果是 dicts,您可能必须使用 row['GameCode'] 或其他东西。 是的,列表中的每个值都是一个字典,其中 (gamecode,pass) 或 (gamecode,rush) 与 gamecode 和 rush 是字典中的关键值。因此,在“if row['GameCode'] == game_code:”行中的代码中是检查字符串“GameCode”还是它的键值? 我添加了一段不同的代码,基于我认为你的临时列表的样子。这样更准确吗?

以上是关于将不同列中的值合并为python列表中的一个的主要内容,如果未能解决你的问题,请参考以下文章

将来自一个数据框的值合并到 Pandas 中的新列中[重复]

将 Python 中的两个电子表格与 Pandas 合并,按“时间”列中最近的“时间”,XX:XX:XX 格式的值

将不同行中的值合并为一列

基于两列中的值合并其他列中的值

将分组后列的多个值合并为python pandas中的一列

PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?