将 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_func
是 np.mean
,这是您想要的 - 但您可以将其设置为不同的值,例如'sum'.
我在 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_func
是 np.mean
,这是您想要的 - 但您可以将其设置为不同的值,例如'sum'.