【发布时间】:2022-01-10 17:03:30
【问题描述】:
我有这本词典:
d = {'a': (1,2,3), 'b': (4,5,6)}
我希望它形成一个数据框,其中键与其对应的值一起显示为行,如下表所示:
| Keys | Values |
|---|---|
| a | 1 |
| a | 2 |
| a | 3 |
| b | 4 |
| b | 5 |
有什么想法吗?
【问题讨论】:
标签: pandas dataframe dictionary key row
我有这本词典:
d = {'a': (1,2,3), 'b': (4,5,6)}
我希望它形成一个数据框,其中键与其对应的值一起显示为行,如下表所示:
| Keys | Values |
|---|---|
| a | 1 |
| a | 2 |
| a | 3 |
| b | 4 |
| b | 5 |
有什么想法吗?
【问题讨论】:
标签: pandas dataframe dictionary key row
d = {'a': (1,2,3), 'b': (4,5,6)}
df = pd.DataFrame(d).unstack().droplevel(1).reset_index().rename({'index':'Keys', 0:'Values'}, axis=1)
输出:
>>> df
Keys Values
0 a 1
1 a 2
2 a 3
3 b 4
4 b 5
5 b 6
【讨论】:
这是我的建议。
df = pd.DataFrame({'Keys': list(dict.keys()), 'Values': list(dict.values())})
df = df.explode(column='Values').reset_index(drop=True
输出结果是这样的:
Keys Values
0 a 1
1 a 2
2 a 3
3 b 4
4 b 5
5 b 6
【讨论】:
.reset_index(drop=True) 将索引从0 0 0 1 1 1 固定为0 1 2 3 4 5。
您可以unstack 数据框、reset_index 并更改列名:
df = (pd.DataFrame(dictionary)
.unstack()
.reset_index()
.loc[:,['level_0',0]]
.rename(columns={'level_0':'keys',0:'values'}))
输出:
keys values
0 a 1
1 a 2
2 a 3
3 b 4
4 b 5
5 b 6
【讨论】: