亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數據框列表轉換為具有自定義鍵的字典列表

將數據框列表轉換為具有自定義鍵的字典列表

子衿沉夜 2022-12-20 11:23:17
輸入數據框列表。每個數據幀可以有不同的長度,總列數也可以不同。每個數據框都有一個名為“special”的列。除此特殊列外,其他列名稱在該列表中將是唯一的。df_1 = pd.DataFrame({"column1":["1","2","3"], "column2":["4","5","6"], "special":["1000","2000","3000"]})df_2 = pd.DataFrame({"column3": ["1","2","3","4"], "column4": ["8","9","10","11"], "column5":["12","13","14","15"],"special":["1000","2000","3000","4000"]})df_list = [df_1,df_2]輸出字典列表,其中每個字典都有 3 個固定鍵:name、value和special。這是 df_list 僅包含 df_1 時的預期輸出。提到這一點是為了簡化:[{'name': 'column1', 'value': '1', 'special': '1000'}, {'name': 'column1', 'value': '2', 'special': '2000'}, {'name': 'column1', 'value': '3', 'special': '3000'}, {'name': 'column2', 'value': '4', 'special': '1000'}, {'name': 'column2', 'value': '5', 'special': '2000'}, {'name': 'column2', 'value': '6', 'special': '3000'}]當前代碼我已經能夠使用數據框上的 apply() 方法來做到這一點,但我懷疑可能會有更好的方法。這是我現在的做法:for data_frame in df_list:    for column in data_frame:        if column != "special":            result.extend(data_frame.apply(lambda x:{"name":column,"value":x[column],"special":x["special"]},axis=1).to_list())你能建議任何優化或不同的方法嗎?我還考慮過連接所有數據幀并僅運行內部循環,但由于它們的長度不盡相同,因此會有很多 NaN 值。那會是處理這個問題的更好方法嗎?
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

IIUc,你可以試試concatmelt

print(pd.concat(df_list,sort=False).melt('special',var_name='name')
     .dropna(subset=['value'])[['name','value','special']].to_dict('records'))

[{'name': 'column1', 'value': '1', 'special': '1000'}, {'name': 'column1', 'value': '2', 'special': '2000'}, {'name': 'column1', 'value': '3', 'special': '3000'}, {'name': 'column2', 'value': '4', 'special': '1000'}, {'name': 'column2', 'value': '5', 'special': '2000'}, {'name': 'column2', 'value': '6', 'special': '3000'}, {'name': 'column3', 'value': '1', 'special': '1000'}, {'name': 'column3', 'value': '2', 'special': '2000'}, {'name': 'column3', 'value': '3', 'special': '3000'}, {'name': 'column3', 'value': '4', 'special': '4000'}, {'name': 'column4', 'value': '8', 'special': '1000'}, {'name': 'column4', 'value': '9', 'special': '2000'}, {'name': 'column4', 'value': '10', 'special': '3000'}, {'name': 'column4', 'value': '11', 'special': '4000'}, {'name': 'column5', 'value': '12', 'special': '1000'}, {'name': 'column5', 'value': '13', 'special': '2000'}, {'name': 'column5', 'value': '14', 'special': '3000'}, {'name': 'column5', 'value': '15', 'special': '4000'}]


查看完整回答
反對 回復 2022-12-20
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

# Create an empty list

melted_df = []


# Melt all the dfs in your list into a dataframe

for dataframe in df_list:

    temp = dataframe.melt(var_name="name", 

        id_vars=["special"], 

        value_name="value")


# Append the melted dfs into your list

melted_df.append(temp)


# Concatenate the dfs in the list

result = pd.concat(melted_df)


# Convert the df into dictionary

result.to_dict(orient='records')

輸出:


[{'special': '1000', 'name': 'column1', 'value': '1'},

 {'special': '2000', 'name': 'column1', 'value': '2'},

 {'special': '3000', 'name': 'column1', 'value': '3'},

 {'special': '1000', 'name': 'column2', 'value': '4'},

 {'special': '2000', 'name': 'column2', 'value': '5'},

 {'special': '3000', 'name': 'column2', 'value': '6'},

 {'special': '1000', 'name': 'column3', 'value': '1'},

 {'special': '2000', 'name': 'column3', 'value': '2'},

 {'special': '3000', 'name': 'column3', 'value': '3'},

 {'special': '4000', 'name': 'column3', 'value': '4'},

 {'special': '1000', 'name': 'column4', 'value': '8'},

 {'special': '2000', 'name': 'column4', 'value': '9'},

 {'special': '3000', 'name': 'column4', 'value': '10'},

 {'special': '4000', 'name': 'column4', 'value': '11'},

 {'special': '1000', 'name': 'column5', 'value': '12'},

 {'special': '2000', 'name': 'column5', 'value': '13'},

 {'special': '3000', 'name': 'column5', 'value': '14'},

 {'special': '4000', 'name': 'column5', 'value': '15'}]



查看完整回答
反對 回復 2022-12-20
  • 2 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號