我是使用熊猫和数据框的初学者。
这是字典:
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)
这给了我想要的结果,但是我想知道是否有一种通用/更有效的方法来获得相同的结果。
谢谢
答案 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))
...