添加逗号,变量名作为后缀
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)
。
【讨论】:
以上是关于添加逗号,变量名作为后缀的主要内容,如果未能解决你的问题,请参考以下文章
python的pymysql中以表名作为变量传递进查询语句中