将 DataFrame 列数据转换为数组

Converting DataFrame column data into array

我在 pandas DataFrame 中有数据,看起来像这样: - 朋友的名字列在一列 - 朋友的名字 - 我的朋友和他们的行为之间的距离(在多个位置)

   Friend     Acquaintance  Distance  Acq.Country
0  Lennon     Martin        25        England
1  Lennon     McCartney     10        England
2  Lennon     McCartney     60        Scotland
3  Lennon     Harrison      200       India
4  Lennon     Starr         40        England
5  Lennon     Ono           350       Japan
7  McCartney  Eastman       110       United States
8  Harrison   Lennon        200       England
8  Harrison   McCartney     220       England
9  Harrison   Starr         222       England

我希望能够重新格式化数据,以便我有一个平均距离矩阵,其中包含一行朋友和几列熟人。该方法基本上是蛮力计算。关于如何使用更高效的代码有什么建议吗?

vectorR=data['Friends'].unique() #takes list of friends
vectorC=data['Acquaint'].unique() #list of acquaintances 

distance_matrix=np.zeros((len(vectorR),len(vectorC)))
for i in range(0,len(vectorX)):
    for j in range(0,len(vectorY)):
        inter=(data['Person']==vectorR[i]) & (data['MatchName']==vectorC[j])
    distance_avg=sum(data['Distance'][inter])/len(data['Distance'][inter])
    distance_matrix[(i,j)]=distance_avg

这听起来像是 pivot_table 的工作:

In [11]: df.pivot_table(index='Friend', columns='Acquaintance', values='Distance')
Out[11]:
Acquaintance  Eastman  Harrison  Lennon  Martin  McCartney  Ono  Starr
Friend
Harrison          NaN       NaN     200     NaN        220  NaN    222
Lennon            NaN       200     NaN      25         35  350     40
McCartney         110       NaN     NaN     NaN        NaN  NaN    NaN

注意:默认的 agg_funcnp.mean,这是您想要的 - 但您可以将其设置为不同的值,例如'sum'.