首页 > 解决方案 > Pandas,从 df 创建字典,用一列替换另一列

问题描述

我有未知数量的 DataFrame。两个例如:

         date  week_score  daily_score site_name
0  2014-07-04         100           90    demo 2
1  2014-07-05          80           55    demo 2
2  2015-07-06          70           60    demo 2
         date  week_score  daily_score site_name
0  2014-07-04          85          100    demo 1
1  2014-07-05          50           80    demo 1
2  2015-07-06          45           30    demo 1

我知道数据框都具有相同的形状和列名。

我想将它们组合成一个字典列表 ( df.to_dict(orient='records'),但将 site_name 作为键并为每个分数执行此操作。

所需的输出有点棘手:

{'week_score: [{'date': '2014-07-04', 'demo 2': 100, 'demo 1': 85},
               {'date': '2014-07-05', 'demo 2': 80, 'demo 1': 50}, 
               {'date': '2014-07-06', 'demo 2': 70, 'demo 1': 45}],

'daily_score: [{'date': '2014-07-04', 'demo 2': 90, 'demo 1': 100},
               {'date': '2014-07-05', 'demo 2': 55, 'demo 1': 80}, 
               {'date': '2014-07-06', 'demo 2': 60, 'demo 1': 30}],

}


标签: pythonpandas

解决方案


你可以试试这段代码:

d = dict()
for col in df.columns[1:-1].tolist():
    new_df = pd.DataFrame({'date':dfs[0]['date']})
    for df in dfs:
        site_name = df['site_name'].unique()[0]
        dropped = df.drop('site_name',axis='columns')
        new_df[site_name] = df[col]
    d[col] = new_df.to_dict('records')
>>>d

输出:

{'week_score': [{'date': '2014-07-04', 'demo1': 85, 'demo2': 100},
  {'date': '2014-07-05', 'demo1': 50, 'demo2': 80},
  {'date': '2015-07-06', 'demo1': 45, 'demo2': 70}],
 'daily_score': [{'date': '2014-07-04', 'demo1': 100, 'demo2': 90},
  {'date': '2014-07-05', 'demo1': 80, 'demo2': 55},
  {'date': '2015-07-06', 'demo1': 30, 'demo2': 60}]}

推荐阅读