在新列中作为字典组合到列



我有一个数据框架,我想生成一个报告,但似乎得到的错误,我无法找出如何修复。这是我的数据框架

Unnamed: 0 COMPANY      rNAME DATE_START DATEFINISH       tID     LABEL
0           0     MOM  11 UNIT A   8/9/2021  8/23/2021  36350000   UNIT 5H
1           1     MOM   7 UNIT A   8/9/2021  8/23/2021  36350000   UNIT 5H
2           2     DAD       7H A   7/7/2021  7/27/2021  36350000   UNIT 5H
3           3     MOM  13 UNIT A   8/9/2021  8/23/2021  36350000   UNIT 5H
4           4     MOM   9 UNIT A   8/9/2021  8/23/2021  36350000   UNIT 5H
5           5     DAD       4H A   7/7/2021  7/27/2021  36350000   UNIT 5H
6           6     DAD       8H A   7/7/2021  7/27/2021  27690000   UNIT 2H
7           7     DAD       5H A   7/7/2021  7/27/2021  27690000   UNIT 2H
8           8     DAD       7H A   7/7/2021  7/27/2021  27690000   UNIT 2H
9           9     DAD       4H A   7/7/2021  7/27/2021  27690000   UNIT 2H

那么我得到错误的代码是

jdata = df.groupby(["COMPANY", "rNAME","DATE_START", "DATEFINISH"], as_index=False) 
.apply(lambda x: x[['tID','LABEL']].to_dict('r')).reset_index().rename(columns={0: "MDATA"}).to_json(orient='records')

那么我想对结果做的是

jsonObject = json.loads(jdata)
for i in jsonObject:
print (i[COMPANY])
print (i[rNAME])
print (i[DATE_START])
print (i[DATEFINISH])
for p in i["MDATA"]:
print (p[tID])

得到的错误是

ValueError: 1 columns passed, passed data had 2 columns

我知道这与字典有关,但我不确定如何修复

我也相信它与数据有关,有时当我收到数据时它工作正常,其他时候我得到x列通过错误。

我在这里看了好几天了,还没有找到解决我的问题,从两个其他的列创建一个字典列,导致这样的错误

这看起来像你正在做的稍微调整:

  1. 获取一系列字典列表(即没有as_index=False)
    • 您还可以通过直接
    • 指定组上的列
  2. 重命名系列,重置索引获取所有数据
  3. 转换为json
>>> dicts = df.groupby(['COMPANY', 'rNAME', 'DATE_START', 'DATEFINISH'])[['tID','LABEL']].apply(lambda x: x.to_dict('r'))
>>> dicts
COMPANY  rNAME      DATE_START  DATEFINISH
DAD      4H A       7/7/2021    7/27/2021     [{'tID': 36350000, 'LABEL': 'UNIT 5H'}, {'tID'...
5H A       7/7/2021    7/27/2021               [{'tID': 27690000, 'LABEL': 'UNIT 2H'}]
7H A       7/7/2021    7/27/2021     [{'tID': 36350000, 'LABEL': 'UNIT 5H'}, {'tID'...
8H A       7/7/2021    7/27/2021               [{'tID': 27690000, 'LABEL': 'UNIT 2H'}]
MOM      11 UNIT A  8/9/2021    8/23/2021               [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
13 UNIT A  8/9/2021    8/23/2021               [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
7 UNIT A   8/9/2021    8/23/2021               [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
9 UNIT A   8/9/2021    8/23/2021               [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
dtype: object
>>> jdata = dicts.rename('MDATA').reset_index().to_json(orient='records')

如果将indent=True传递给to_json(),则输出如下:

>>> print(jdata[:500])
[
{
"COMPANY":"DAD",
"rNAME":"4H A",
"DATE_START":"7/7/2021",
"DATEFINISH":"7/27/2021",
"MDATA":[
{
"tID":36350000,
"LABEL":"UNIT 5H"
},
{
"tID":27690000,
"LABEL":"UNIT 2H"
}
]
},
{
"COMPANY":"DAD",
"rNAME":"5H A",
"DATE_START":"7/7/2021",
"DATEFINISH":"7/27/2021",
"MDATA":[
{
"tID":27690000,
"LABEL":"UNIT 2H"
}
]
},
{
"COMPANY":"DAD",
"rNAME":"7H A",
"DATE_START":"7/7/2021",
"DATEFINISH":"7/27/2021",
"M

尝试不使用as_index=Falsegroupby:

jdata = df.groupby(["COMPANY", "rNAME","DATE_START", "DATEFINISH"])['tID','LABEL'] 
.apply(lambda x: x.to_dict('r'))  
.reset_index(name="MDATA") 
.to_dict(orient='records')
for i in jdata:
for key in ["COMPANY", "rNAME", "DATE_START", "DATEFINISH"]:
print(i[key], end=" ")
for p in i["MDATA"]:
print(p["tID"], end=" ")
print()
DAD 4H A 7/7/2021 7/27/2021 36350000 27690000 
DAD 5H A 7/7/2021 7/27/2021 27690000 
DAD 7H A 7/7/2021 7/27/2021 36350000 27690000 
DAD 8H A 7/7/2021 7/27/2021 27690000 
MOM 11 UNIT A 8/9/2021 8/23/2021 36350000 
MOM 13 UNIT A 8/9/2021 8/23/2021 36350000 
MOM 7 UNIT A 8/9/2021 8/23/2021 36350000 
MOM 9 UNIT A 8/9/2021 8/23/2021 36350000 

对代码的其他更改:

  • 指定groupby语句中使用的列
  • reset_index
  • 中重命名结果列
  • 直接转换为dict而不是json

最新更新