如何在Pandas DataFrame列中查找一组字符串值的相关性?

0 投票
1 回答
36 浏览
提问于 2025-04-14 18:17

我有一个数据框 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

作为一个数据分析师,

  1. 我想找出每个 ID 对应的 Var1Var2 之间的相关系数值
  2. 我想找出哪个地区的平均停机时间与事件数量的比值最高,并把结果单独保存为 CSV 文件

考虑到数据列中包含字符串值,比如 IDDistrict,请给我一些简单的方法来编码或分组,以便我可以使用 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

撰写回答