【问题标题】:Add comma with Variable name as suffix添加逗号,变量名作为后缀
【发布时间】:2021-04-05 23:58:51
【问题描述】:

我正在研究一种方案,通过将一列中的两个变量和另一列中的分数组合起来,将相关矩阵的所有分数附加到另一个下方,最后按降序对它们进行排序,以找出得分最高的变量。

我快到了,但发现很难在 for 循环中附加逗号 (,) 以及作为后缀的变量名(即下面代码中的第 6 行 series.add_suffix(', Temp9am')其中 var 是 for 循环中的变量名,我需要 , 在它前面。

请找到以下代码,我附上了我正在使用的数据框的屏幕截图。

df_sorted_
corre_score = pd.DataFrame()
for var in df_sorted_.columns:
    series = df_sorted_[var]
    series_ = series.add_suffix(', var')
    series1 = pd.DataFrame(series_)
    series1.columns = ['Score_']
    series1

数据框图片为

预期输出如下,所有变量都附加在另一个下方

【问题讨论】:

  • 您不需要将var 用作var 而不是用作字符串吗?我不太确定这是否是您的问题,但这是我发现的。 series.add_suffix(',' + var) 也许?

标签: python pandas for-loop suffix


【解决方案1】:

使用stack 将值堆叠在一列中。

然后,重命名索引。

dfn = df.stack()
dfn.index = pd.Series(list(dfn.index)).str.join(', ')

【讨论】:

    【解决方案2】:

    如果我的问题没有错,你可以这样做。

    df.index=df.index+","
    pd.DataFrame(df.stack(),columns=["Score_"]).sort_values(by='Score_', ascending=False)
    

    【讨论】:

      【解决方案3】:

      尝试使用stack<dataframe>.index.map(','.join)

      rs = np.random.RandomState(0)
      df = pd.DataFrame(rs.rand(5, 5), columns= [ chr(i+66) for i in range(5)])
      corr = df.corr()
      

      更正:

          B           C           D           E           F
      B   1.000000    0.861882    -0.687578   0.220408    -0.965567
      C   0.861882    1.000000    -0.770134   -0.283359   -0.807373
      D   -0.687578   -0.770134   1.000000    0.341363    0.701713
      E   0.220408    -0.283359   0.341363    1.000000    -0.262302
      F   -0.965567   -0.807373   0.701713    -0.262302   1.000000
      

      corr[corr==1]=np.nan
      
      s = corr.stack()
      s.index = s.index.map(','.join)
      pd.DataFrame(s, columns=['Score'])
      

          Score
      B,C 0.861882
      B,D -0.687578
      B,E 0.220408
      B,F -0.965567
      C,B 0.861882
      C,D -0.770134
      C,E -0.283359
      C,F -0.807373
      D,B -0.687578
      D,C -0.770134
      D,E 0.341363
      D,F 0.701713
      E,B 0.220408
      E,C -0.283359
      E,D 0.341363
      E,F -0.262302
      F,B -0.965567
      F,C -0.807373
      F,D 0.701713
      F,E -0.262302
      

      【讨论】:

      • corr[corr==1]=np.nan
      【解决方案4】:

      你可以使用pd.DataFrame.melt,这解决了df.stack中NaN遗漏的问题:

      >>> df = pd.get_dummies(list('abcd'))
      
      >>> df
         a  b  c  d
      0  1  0  0  0
      1  0  1  0  0
      2  0  0  1  0
      3  0  0  0  1
      
      >>> df = df.melt(value_name='Score', ignore_index=False)
      
      >>> df.index = df.index.astype(str) + ', ' + df.pop('variable')
      
            Score
      0, a      1
      1, a      0
      2, a      0
      3, a      0
      0, b      0
      1, b      1
      2, b      0
      3, b      0
      0, c      0
      1, c      0
      2, c      1
      3, c      0
      0, d      0
      1, d      0
      2, d      0
      3, d      1
      

      在您的情况下,您不需要将 df.index 转换为 astype(str)

      【讨论】:

        猜你喜欢
        • 2011-04-14
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 1970-01-01
        • 2022-12-01
        • 2020-04-04
        相关资源
        最近更新 更多