python - Pandas 如何将 3 组的列旋转成行

标签 python pandas dataframe transformation

我有一个需要转换和旋转的 pandas df。每个季节都有 3 列与之关联(开始、结束和费率)。我希望旋转这些列,最后只有 3 列开始、结束和速率 enter image description here

df:

ID S1start  S1end  Rate  S2start  S2end   Rate  S3start  S3end  Rate  S4start  S4end  Rate
1  1/1/21  1/31/21  80   2/1/21  2/28/21   85   3/1/21  3/31/21  90   4/1/21  4/30/21  95

最后:

 ID  Start     End   Rate
  1  1/1/21  1/31/21  80
  1  2/1/21  2/28/21  85
  1  3/1/21  3/31/21  90
  1  4/1/21  4/30/21  95

最佳答案

您可以将 df.filterpd.concat 一起使用:

In [589]: start = df.stack().filter(like='start').reset_index()[0]    
In [590]: end = df.stack().filter(like='end').reset_index()[0]
In [591]: rate = df.stack().filter(like='Rate').reset_index()[0]

In [594]: x = pd.concat([start.rename('Start'), end.rename('End'), rate.rename('Rate')], 1)

假设您有 2 个静态列:ID, PropCode。您可以像这样将这些列附加到 x:

In [640]: x[['ID', 'PropCode']] = df[['ID', 'PropCode']].values.tolist() * len(x)

In [641]: x
Out[641]: 
    Start      End Rate  ID  PropCode
0  1/1/21  1/31/21   80   1     52032
1  2/1/21  2/28/21   85   1     52032
2  3/1/21  3/31/21   90   1     52032
3  4/1/21  4/30/21   95   1     52032

关于python - Pandas 如何将 3 组的列旋转成行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65583568/

相关文章:

Python 子包和命名空间

python - 对图像执行 OCR 时,Tesseract 返回乱码

python - 带有嵌套列表的Python 3程序,在编译时提示 'tuple'类错误

python - 如何根据多列从一个数据帧中减去另一个数据帧中的值?

python - 从 Pandas 数据框中删除闰年

r - 根据两列的字符串长度选择行

python - 我应该停止使用已弃用的模块吗?

python - Pandas 将 Excel 文件中的空行组合到数据框中的单行

python - 将两个数据框相乘 Python

python - 分解串联列表或数据框,python