json Python:将PandasDataFrame转换为列表的字典

1u4esq0p  于 2023-03-09  发布在  Python
关注(0)|答案(4)|浏览(149)

我需要转换此DataFrame:

meterid    timestamp                  value
123       2018-04-09T21:34:55.335Z     0
123       2018-05-10T21:34:55.335Z     10
456       2018-04-09T21:34:55.335Z     200

转换为以下格式:

{
   "data":{
      "123":[
         [
            "2018-04-09T21:34:55.335Z",
            0
         ],
         [
            "2018-05-10T21:34:55.335Z",
            10
         ]
      ],
      "456":[
         [
            "2018-04-09T21:34:55.335Z",
            200
         ]
      ]
   }
}

转换的最佳方式是什么?我尝试了不同orient值的to.dict(),但它没有给予我想要的。任何帮助将不胜感激。提前感谢。

s3fp2yjn

s3fp2yjn1#

有点笨拙,但是你可以在字典里做一行和存储:

data_store = dict()
for i, row in df.iterrows():
    if data_store.get(row["meterid"]):
        data_store[row["meterid"]] = row["timestamp" : ].tolist()
    else:
        data_store[row["meterid"]] = []
        data_store[row["meterid"]] = row["timestamp" : ].tolist()

如果meterid不是唯一的,则会给予问题,但如果它是唯一的,则应该可以工作。

fkvaft9z

fkvaft9z2#

您可以:
dict((df.index[i],df.iloc[i,1:].to_list()) for i in range(len(df)))
作为一个快速而肮脏的选择。

z31licg0

z31licg03#

我会用下面的代码将所有数据列合并为一列:

df["combined"] = df.drop("meterid", axis=1).values.tolist()

然后,我将使用下面的代码生成您指定的输出:

df[["meterid", "combined"]].groupby("meterid")["combined"].apply(list).to_dict()

由于提示符中的meterid不是唯一的,所以我在编写这段代码时假设meterid不是 Dataframe 的索引。

1sbrub3j

1sbrub3j4#

df1.set_index("meterid").apply(lambda ss:ss.tolist(),axis=1)\
    .groupby(level=0).agg(list).to_dict()

输出:

{123: [['2018-04-09T21:34:55.335Z', 0], ['2018-05-10T21:34:55.335Z', 10]],
 456: [['2018-04-09T21:34:55.335Z', 200]]}

相关问题