python - 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}],
}
解决方案
你可以试试这段代码:
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}]}
推荐阅读
- python - 有没有办法知道哪些列有不同的数据类型可以合并?Python - 熊猫
- java - 正则表达式以匹配具有非数字字符和可变数字的精确字符串
- r - 如何将多个相同类型的 pdata 身份添加到一个样本中,并在绘图时能够通过这些身份进行区分
- dart - 我在飞镖中遇到了这个问题,有解决方案吗?
- python - 如何在python中处理来自航拍图像的gcp点列表?
- gensim - Gensim 的 evaluate_word_pairs 的输出中使用了哪些指标?
- python - 在 python 中处理特殊的鼠标按钮
- flutter - 如何在播放器使用 just_audio 颤振播放时更改音频源?
- python - JSON 到 Python 到 JSON
- asp.net - 如何使用 javascript 从 ASP.NET 按钮获取 url 地址