我需要轉換這個資料幀:
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
]
]
}
}
改變這種情況的最佳方法是什么?我嘗試to.dict()了不同的 值orient,但它沒有給我想要的。任何幫助,將不勝感激。提前致謝。
uj5u.com熱心網友回復:
有點hacky,但你可以做iterrow并存盤在字典中:
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 不是唯一的,則會出現問題,但如果是,它應該可以作業。
uj5u.com熱心網友回復:
你可以這樣做:
dict((df.index[i],df.iloc[i,1:].to_list()) for i in range(len(df)))
作為一種快速而骯臟的選擇。
uj5u.com熱心網友回復:
您可以使用to_dict('split') dict.setdefault:
temp = {}
for data in df.to_dict('split')['data']:
temp.setdefault(data[0], []).append(data[1:])
out = {'data': temp}
輸出:
{'data': {123: [['2018-04-09T21:34:55.335Z', 0], ['2018-05-10T21:34:55.335Z', 10]], 456: [['2018-04-09T21:34:55.335Z', 200]]}}
uj5u.com熱心網友回復:
我將使用以下代碼將所有資料列合并為 1 列:
df["combined"] = df.drop("meterid", axis=1).values.tolist()
然后我將使用下面的代碼來生成您指定的輸出:
df[["meterid", "combined"]].groupby("meterid")["combined"].apply(list).to_dict()
由于提示中的meterid 不是唯一的,我撰寫此代碼時假設meterid 不是資料幀的索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392026.html
上一篇:int64到HHMM字串
