【发布时间】:2021-11-17 00:11:12
【问题描述】:
我是编码新手。我在这个网站上寻找了类似的问题,这帮助我想出了我的代码的工作版本,但我需要帮助以使其更专业。
我需要帮助来遍历 pandas 中的数据框行。我想要做的是在“描述”列中找到相同的项目(例如杂货)并从“金额”列中总计(总和)它们的值,最后将结果写入 .csv 文件。我这样做的原因是为了根据这些类别为我想要创建的条形图编译数据。
在以下代码的帮助下,我能够完成所有这些工作,但这很可能不是很 Python 或高效。我所做的是使用嵌套在 if 语句中的 print 语句来获取类别标签 (i) 并打印到文件中。问题是我必须添加很多东西才能使整体工作。首先,我必须创建一个空列表以确保 if 语句不会在每次在“描述”列中看到所需项目时触发 .loc。其次,我不确定保存打印语句是否是最好的方法,因为它看起来很假。感觉就像我离使用打孔卡还有一步之遥。简而言之,如果有人可以帮助我使我的代码更符合标准,我将不胜感激。
'''
used_list = []
for i in df['Description']:
if i in used_list:
continue
sys.stdout = open(file_to_hist, "a")
print(i,',', df.loc[df['Description'] == i, 'Amount'].sum())
used_list.append(i)
'''
我还尝试了一种稍微不同的方法(将结果直接保存到 df 中),但随后我在“金额”列中得到了 NaN 值,并且没有其他错误(退出代码 0)来帮助我了解发生了什么:
'''
used_list = []
df_hist_data = pd.DataFrame(columns=['Description', 'Amount'])
for i in df['Description']:
if i in used_list:
continue
df_hist_data = df_hist_data.append({'Description' : i}, {'Amount' : df.loc[df['Description'] == i, 'Amount'].sum()})
used_list.append(i)
print(df_hist_data)
'''
【问题讨论】:
-
嗨,我最初读了你的帖子有点快,并认为你希望对一组值求和。我知道您的问题更多是冗余或具有相同
description值的行。我已经更新了我的答案,希望它适合您的需求。
标签: python pandas dataframe csv iteration