Python 如何在pandas中将数组格式化为特定的数据帧格式?

Python 如何在pandas中将数组格式化为特定的数据帧格式?,python,pandas,Python,Pandas,我有一个如下所示的数组: {'loc.1': array([ 1,2,3,4,7,5,6]),'loc.2': array([ 3,4,3,7,7,8,6]),'loc.3': array([ 1,4,3,1,7,8,6]).....} loc.1 loc.2 loc.3 1 3 1 2 4 4 3 3 3 4 7 1 7 7 7 5 8

我有一个如下所示的数组:

{'loc.1': array([  1,2,3,4,7,5,6]),'loc.2': array([  3,4,3,7,7,8,6]),'loc.3': array([  1,4,3,1,7,8,6]).....} 
loc.1    loc.2  loc.3
1        3      1
2        4      4
3        3      3
4        7      1
7        7      7
5        8      8
6        6      6
在a=pd.DataFrame(数组)之后,它如下所示:

{'loc.1': array([  1,2,3,4,7,5,6]),'loc.2': array([  3,4,3,7,7,8,6]),'loc.3': array([  1,4,3,1,7,8,6]).....} 
loc.1    loc.2  loc.3
1        3      1
2        4      4
3        3      3
4        7      1
7        7      7
5        8      8
6        6      6
但这正是我想要的:

Col1.    Col.2 
loc.1    1,2,3,4,7,5,6
loc.2    3,4,3,7,7,8,6
loc.3    1,4,3,1,7,8,6 
我需要这个特殊的格式,因为我希望随后与另一个表连接。熊猫将是我首选的解决方案


谢谢,如果这是一个愚蠢的问题,请道歉。

首先在
字典理解中需要连接值

然后对于
系列
使用:

a = pd.Series({k:','.join(v.astype(str)) for k, v in array.items()})
print (a)
loc.1    1,2,3,4,7,5,6
loc.2    3,4,3,7,7,8,6
loc.3    1,4,3,1,7,8,6
dtype: object
对于
数据帧

d = {k:','.join(v.astype(str)) for k, v in array.items()}
a = pd.DataFrame({'a': list(d.keys()), 'b': list(d.values())})
另一种解决方案是创建元组:

L = [(k, ','.join(v.astype(str))) for k, v in array.items()]
a = pd.DataFrame(L, columns=['a','b'])

如果需要列中的数组,请删除
join
,并将其转换为
string
s:

L = [(k, v) for k, v in array.items()]
a = pd.DataFrame(L, columns=['a','b'])
print (a)
       a                      b
0  loc.1  [1, 2, 3, 4, 7, 5, 6]
1  loc.2  [3, 4, 3, 7, 7, 8, 6]
2  loc.3  [1, 4, 3, 1, 7, 8, 6]
输出:

loc.1    [1, 2, 3, 4, 7, 5, 6]
loc.2    [3, 4, 3, 7, 7, 8, 6]
loc.3    [1, 4, 3, 1, 7, 8, 6]
Name: lists, dtype: object

根据您需要的格式,有两个选项:

d = {'loc.1': np.array([  1,2,3,4,7,5,6]),
     'loc.2': np.array([  3,4,3,7,7,8,6]),
     'loc.3': np.array([  1,4,3,1,7,8,6])} 

res1 = pd.DataFrame([[x] for x in d.values()], index=d.keys())

#                            0
# loc.1  [1, 2, 3, 4, 7, 5, 6]
# loc.2  [3, 4, 3, 7, 7, 8, 6]
# loc.3  [1, 4, 3, 1, 7, 8, 6]

res2 = pd.DataFrame([', '.join(list(map(str, x))) for x in d.values()], index=d.keys())

#                          0
# loc.1  1, 2, 3, 4, 7, 5, 6
# loc.2  3, 4, 3, 7, 7, 8, 6
# loc.3  1, 4, 3, 1, 7, 8, 6

您可以将
stack
groupby

df.stack().astype(str).groupby(level=1).apply(','.join)
Out[738]: 
loc.1    1,2,3,4,7,5,6
loc.2    3,4,3,7,7,8,6
loc.3    1,4,3,1,7,8,6
dtype: object

谢谢-我如何删除左侧的索引并在索引中创建一个索引?您可以使用
a.set_index('a')
a=pd.Series({k:','.join(v.astype(str)),表示数组中的k,v.items())。到_frame('b')