Python或Pandas数据摘要(将表转换为行名称:[列名称,值]…]的字典)

Python或Pandas数据摘要(将表转换为行名称:[列名称,值]…]的字典),python,pandas,Python,Pandas,请查找以下数据,其中索引名称重复了3到5次,因为月报在提交给我之前未正确合并3个月 Name Score Rating Peralta 0 40 Peralta 20 0 Peralta 0 0 Amy 0 40 Amy 20 40 Amy -20 40 Terry 0 0 Terry -20 40 Terry 0 -40 Gina 20 0 Gina 0 0 Gina -20 40 到目前为止,我只提取了最后代码中所示的列

请查找以下数据,其中索引名称重复了3到5次,因为月报在提交给我之前未正确合并3个月

Name    Score   Rating
Peralta 0   40
Peralta 20  0
Peralta 0   0
Amy 0   40
Amy 20  40
Amy -20 40
Terry   0   0
Terry   -20 40
Terry   0   -40
Gina    20  0
Gina    0   0
Gina    -20 40
到目前为止,我只提取了最后代码中所示的列名。但我无法将的“列名”和的“单元格值”放在一起

我需要以以下格式总结数据: (根据您的喜好,结果可以有制表符或逗号。)

所有用于汇总数据的标准函数都没有帮助,和/或以上述格式提供汇总的其他库不存在

下面的代码实际上有助于降低列名,但是与该列+行相关的单元格的值没有出现

for k, v in dff_dict.items():               # k: name of index, v: is a df
    check = v.columns[(v == 20).any()]
    if len(check) > 0:
        print((k, check.to_list()), file=open("output.txt", "a"))
有什么方法可以达到第二张表中所示的“最终结果”
?(最终结果不一定是任何特定格式,如数据帧或表格) 谢谢

注:

原始数据可能包含20多列数百行,但我已经简化了数据,因此请不要仅限于几行或几列。”

最后2个括号内的值也显示了行中所有正数和负数的总和,在将值降到适当位置后。正数和负数分开

这里有一篇有用的文章,但是我需要[column\u name,value],而不仅仅是[row:value]


我认为如果您可以将整个数据集分成两部分,考虑到“正数和负数分别求和”的要求,这会更容易

从您的示例数据开始:

import pandas as pd
import numpy as np
data = [
{"Name": "Peralta", "Score": 0, "Rating": 40},
{"Name": "Peralta", "Score": 20, "Rating": 0},
{"Name": "Peralta", "Score": 0, "Rating": 0},
{"Name": "Amy", "Score": 0, "Rating": 40},
{"Name": "Amy", "Score": 20, "Rating": 40},
{"Name": "Amy", "Score": -20, "Rating": 40},
{"Name": "Terry", "Score": 0, "Rating": 0},
{"Name": "Terry", "Score": -20, "Rating": 40},
{"Name": "Terry", "Score": 0, "Rating": -40},
{"Name": "Gina", "Score": 20, "Rating": 0},
{"Name": "Gina", "Score": 0, "Rating": 0},
{"Name": "Gina", "Score": -20, "Rating": 40},
]
df = pd.DataFrame(data).set_index("Name")
我们可以得到正负值的预测:

df_pos = df.where(df>=0, other=0)
df_neg = df.where(df<0, other=0)

注意-在这一阶段,数据仍然在两个数据框中,没有展平到您显示的
[字段,值]
格式。

您的“最终结果”似乎不是表格格式,您希望它作为字典列表吗?亲爱的@Jimmar,是的,它可以是任何格式,不需要是数据帧或任何表。。因为它最终将由完全没有编码知识或对excel没有兴趣的非程序员阅读和分析。。他们只需要格式的数据,最后一项分别是所有正数和负数的总和。。。。您的解决方案在任何情况下都是受欢迎的format@Jimmar请在上面找到一个小的编辑,其中+和-的总和分别放在括号内,请。。。再次非常感谢您…为了清晰起见,请编辑此问题。有语法问题,我不知道想要的输出是什么is@anon01所需结果是第二个编码部分,以注释“####Final result”开头。。。结果再次显示在第二个编码部分的注释下面…亲爱的@Josh,非常感谢您的解决方案。。实际上,数据是从外部文件(csv)加载的。。如果我只做**data=pd.read_csv(“input.csv”,index=“Name”)-uu{事实上,当我尝试它时,它会给我错误::parser_f()得到一个意外的关键字参数'index',请帮助…这应该可以很好地工作,只是做了一些小的更改。你正在用文件替换
数据,这样你就可以删除
数据=[…]
并从df的赋值开始,如下所示:
df=pd.read\u csv(“data.csv”,index\u col=“Name”)
。请注意,这假设数据位于名为data.csv的文件中,并且与您的脚本位于同一目录中-您可能需要在那里进行修改。还要注意参数是
index\u col
,而不是
index
。再次感谢,也请帮助我如何在“.csv”或“.txt”文件中查看此新数据。我很高兴我试着把它打印成一个文件,但我无法把它打印出来。真的很抱歉,再次感谢你,请让我知道如何把它打印成一个文件。像
df\u pos.to\u csv(“df\u pos.csv”)
这样的东西对你有用吗?
df_pos = df.where(df>=0, other=0)
df_neg = df.where(df<0, other=0)
df_pos = df_pos.groupby(by="Name").sum()
df_pos["total_positive"] = df_pos.apply(np.sum, axis=1)

df_neg = df_neg.groupby(by="Name").sum()
df_neg["total_negative"] = df_neg.apply(np.sum, axis=1)