添加逗号,变量名作为后缀

Posted

技术标签:

【中文标题】添加逗号,变量名作为后缀【英文标题】: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) 也许? 【参考方案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)

【讨论】:

以上是关于添加逗号,变量名作为后缀的主要内容,如果未能解决你的问题,请参考以下文章

数组名作函数参数时,实参与形参变量之间的数据传递是?

【C 语言】数组元素和数组名作为函数参数

C - 将结构值中的变量名作为字符串访问

python的pymysql中以表名作为变量传递进查询语句中

如何通过 PL/SQL 过程和表名作为变量打印动态 SQL 中的所有表行?

数组名作为函数的参数属于啥传递为啥