【问题标题】:How do I run correlations for each row subsets in Pandas?如何为 Pandas 中的每个行子集运行相关性?
【发布时间】:2018-09-14 06:14:45
【问题描述】:

假设我有一个虚构的 pandas 数据框 df

假设它有三列:genderheightweight

是否有内置或有效的方法来获取每个 genderheightweight 的相关性?

到目前为止我做了什么:

  1. 手动过滤每个性别的数据框,然后运行
    相关性。
  2. 这对我的样本集有效,但在生产集中会崩溃,因为我有更多的类别而不仅仅是gender。我有数百个。

我的次优代码示例:

df_m=df[(df['gender']=='male')]
df_m['height'].corr(df_m['weight'])
df_f=df[(df['gender']=='female')]
df_f['height'].corr(df_f['weight'])

理想输出:

'gender' 'correlation'
'male' .9007876876 
'female' .8777687666

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:
    df.groupby('gender').apply(lambda x: x.height.corr(x.weight)).rename('correlation').to_frame()
    

    最后一部分(renameto_frame)只是为了得到你想要的输出。

    示例

    >>> df
       gender  height  weight
    0    male       1       4
    1    male       2       4
    2    male       3       5
    3  female       1       4
    4  female       2       3
    5  female       3       5
    
    >>> df.groupby('gender').apply(lambda x: x.height.corr(x.weight)).rename('correlation').to_frame()
            correlation
    gender             
    female     0.500000
    male       0.866025
    

    【讨论】:

    • 干得漂亮!对于未来的读者,如果您想将这些值放入新的数据框中,只需在代码前添加df_yourname=
    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多