在 Pandas 中转置列和排名值

Transpose columns and rank values in Pandas

我对 pandas 中的值转置或堆叠有疑问。

我有 1 个数据框

| product | s1_value | s2_value | s3_value |
| --------| -------- | -------- | -------- |
| First   | 105      | 103      | 108      |
| Second  | 205      | 186      | 204      |

我想转换并加入它们以产生下一个结果(¿可以在列表中然后迭代它并排名?)

| stacked_values_p1 |
| ----------------- |
| 105               |
| 103               |
| 108               |

在 Pandas 中使用 rank 函数对上面的列进行排序,然后有一个包含初始数据 + rank 列的数据帧,根据哪个值更高

| initial data | ... | s1_rank | s2_rank | s3_rank |
| ------------ | --- | ------- | ------- | ------- |
|     ...      | ... |    2    |    3    |    1    |
|     ...      | ... |    1    |    3    |    2    |

我一直在阅读有关堆栈、转置和合并的内容,但我有点困惑。

谢谢!

按列创建索引后首次使用转置product:

df1 = df.set_index('product').T
print (df1)
product   First  Second
s1_value    105     205
s2_value    103     186
s3_value    108     204

第二次使用 DataFrame.rank 用于没有第一次的所有列并添加到原始 DataFrame:

f = lambda x: x.replace('value','rank')
df = df.join(df.iloc[:, 1:].rank(axis=1, ascending=False).astype(int).rename(columns=f))
print (df)
  product  s1_value  s2_value  s3_value  s1_rank  s2_rank  s3_rank
0   First       105       103       108        2        3        1
1  Second       205       186       204        1        3        2