我有一本字典如下:
d={1:(array[2,3]), 2:(array[8,4,5]), 3:(array[6,7,8,9])}
如图所示,这里每个键的值是可变长度数组。
现在我想将其转换为DataFrame。所以输出看起来像:
A B
1 2
1 3
2 8
2 4
2 5
3 6
3 7
3 8
3 9
我使用了pd.Dataframe(d),但它没有处理一对多的映射。非常感谢。
答案 0 :(得分:4)
使用Series
构建函数与str.len
一起使用lists
的长度(array
已转换为lists
)。
然后使用DataFrame
,numpy.repeat
和numpy.concatenate
创建新的Index.values
:
d = {1:np.array([2,3]), 2:np.array([8,4,5]), 3:np.array([6,7,8,9])}
print (d)
a = pd.Series(d)
l = a.str.len()
df = pd.DataFrame({'A':np.repeat(a.index.values, l), 'B': np.concatenate(a.values)})
print (df)
A B
0 1 2
1 1 3
2 2 8
3 2 4
4 2 5
5 3 6
6 3 7
7 3 8
8 3 9
答案 1 :(得分:3)
pd.DataFrame(
[[k, v] for k, a in d.items() for v in a.tolist()],
columns=['A', 'B']
)
A B
0 1 2
1 1 3
2 2 8
3 2 4
4 2 5
5 3 6
6 3 7
7 3 8
8 3 9
设置
d = {1: np.array([2,3]), 2: np.array([8,4,5]), 3: np.array([6,7,8,9])}
答案 2 :(得分:2)
这是我的版本:
(pd.DataFrame.from_dict(d, orient='index').rename_axis('A')
.stack()
.reset_index(name='B')
.drop('level_1', axis=1)
.astype('int'))
Out[63]:
A B
0 1 2
1 1 3
2 2 8
3 2 4
4 2 5
5 3 6
6 3 7
7 3 8
8 3 9