从具有多个值分配给每个键的字典中创建数据框

时间:2020-01-07 04:09:38

标签: python pandas dataframe

我是使用熊猫和数据框的初学者。

这是字典:

names_values = {"Alex":[1,2,3,4,5],"Sam":[5,6,7,8,9]}

我希望数据框看起来像这样:

   name  value
0  Alex    1.0
1  Alex    2.0
2  Alex    3.0
3  Alex    4.0
4  Alex    5.0
5   Sam    5.0
6   Sam    6.0
7   Sam    7.0
8   Sam    8.0
9   Sam    9.0

我的方法是:

df = pd.DataFrame({"name":[],"value":[]})

for name in names_values.keys():
    for i in range(len(names_values[name])):
        df = df.append({"name": name, "value": names_values[name][i]}, ignore_index=True)

这给了我想要的结果,但是我想知道是否有一种通用/更有效的方法来获得相同的结果。

谢谢

2 个答案:

答案 0 :(得分:4)

使用pandas.Dataframe.melt的一种方式:

df = pd.DataFrame(names_values).melt(var_name='name')
print(df)

输出:

   name  value
0  Alex      1
1  Alex      2
2  Alex      3
3  Alex      4
4  Alex      5
5   Sam      5
6   Sam      6
7   Sam      7
8   Sam      8
9   Sam      9

答案 1 :(得分:1)

您还可以使用itertools.cycle修改字典,然后将其加载。

from itertools import cycle

cols = ['name', 'value']
d = []

for k, v in names_values.items():
    vals = zip(cycle([k]), v)
    d.extend(list(vals))

pd.DataFrame(d, columns=cols)

   name  value
0  Alex      1
1  Alex      2
2  Alex      3
3  Alex      4
4  Alex      5
5   Sam      5
6   Sam      6
7   Sam      7
8   Sam      8
9   Sam      9

另一个选项是itertools.repeat

from itertools import repeat

for k, v in names_values.items():
    vals = zip(repeat(k), v)
    d.extend(list(vals))

...
相关问题