将不同列中的值合并为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 中的新列中[重复]