如何在Pandas DataFrame列中查找一组字符串值的相关性?
我有一个数据框 df:
ID District Var1 (Average Down Time) Var2 (Incident Count)
0206571-017 TSUEN WAN 1.2 4
0206571-017 TSUEN WAN 2.1 6
0206571-017 TSUEN WAN 3.0 7
0206571-017 TSUEN WAN 1.3 8
0206571-019 TSING YI 2.1 9
0206571-018 CENTRAL 3.2 13
作为一个数据分析师,
- 我想找出每个
ID
对应的Var1
和Var2
之间的相关系数值 - 我想找出哪个地区的平均停机时间与事件数量的比值最高,并把结果单独保存为 CSV 文件
考虑到数据列中包含字符串值,比如 ID
和 District
,请给我一些简单的方法来编码或分组,以便我可以使用 df.corr() 来输出相关矩阵
1 个回答
1
为了回答你关于如何计算每个ID的var1和var2之间的相关系数的问题,这里提供了一种编码的方法。
corr_coeff = df.groupby('ID')[['Var1', 'Var2']].corr()
print(corr_coeff)
结果如下:
Var1 Var2
ID
0206571-017 Var1 1.00000 0.30327
Var2 0.30327 1.00000
0206571-018 Var1 NaN NaN
Var2 NaN NaN
0206571-019 Var1 NaN NaN
Var2 NaN NaN
对于第二个问题,关于找出哪个地区的平均停机时间/事件数量最高,并将其作为单独的CSV文件提供,
avg_district = df.groupby('District')[['Var1', 'Var2']].mean()
highest_avg_downtime = avg_district['Var1'].idxmax()
highest_avg_incidents = avg_district['Var2'].idxmax()
highest_avg_downtime_df = df[df['District'] == highest_avg_downtime]
highest_avg_incidents_df = df[df['District'] == highest_avg_incidents]
highest_avg_downtime_df.to_csv('highest_avg_downtime.csv', index=False)
highest_avg_incidents_df.to_csv('highest_avg_incidents.csv', index=False)
最高的平均停机时间和事件数量将分别保存在两个不同的CSV文件中,文件名为"highest_avg_downtime.csv"和"highest_avg_incidents.csv"。
为了将分类值(比如字符串)转换为数值,我们可以使用标签编码器。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['ID'] = le.fit_transform(df['ID'])
df['District'] = le.fit_transform(df['District'])
这样会得到如下结果:
ID District Var1 Var2
0 0 2 1.2 4
1 0 2 2.1 6
2 0 2 3.0 7
3 0 2 1.3 8
4 2 1 2.1 9
5 1 0 3.2 13
在编码之后,如果使用df.corr()
来计算输出的相关矩阵,结果将是:
ID District Var1 Var2
ID 1.000000 -0.714286 0.273190 0.585800
District -0.714286 1.000000 -0.589516 -0.898227
Var1 0.273190 -0.589516 1.000000 0.648563
Var2 0.585800 -0.898227 0.648563 1.000000