python - Pandas 根据左侧的列重命名列

标签 python pandas

考虑一个数据框,df:

Metric_a Status.1 Metric_b Status.2, Metric_c, Status.3
10       kg       11       mg        15        ml
12       kg       21       mg        25        ml
130      kg       41       mg        35        ml

我从使用多个 Status 列的 csv 中读取此内容。 Pandas 自然地索引这些。

我希望使用每个Status 列左侧的列来重命名Status 列。通过检查,我相信顺序得到了维持,并且左侧的列始终是合适的。

期望的输出:

Metric_a Status_Metric_a Metric_b Status_Metric_b Metric_c, Status_Metric_c
    10       kg       11       mg        15        ml
    12       kg       21       mg        25        ml
    130      kg       41       mg        35        ml

最佳答案

您可以使用maskffill (它仅适用于 Series,因此需要转换 index to_series ):

a = df.columns.to_series()
mask = a.str.contains('Status')
df.columns = a.mask(mask, 'Status_' + a.mask(mask).ffill())
print (df)
   Metric_a Status_Metric_a  Metric_b Status_Metric_b  Metric_c  \
0        10              kg        11              mg        15   
1        12              kg        21              mg        25   
2       130              kg        41              mg        35   

  Status_Metric_c  
0              ml  
1              ml  
2              ml  

另一个解决方案 numpy.whereshift :

a = df.columns.to_series()
df.columns = np.where(a.str.contains('Status'), 'Status_' + a.shift(), a)
print (df)
   Metric_a Status_Metric_a  Metric_b Status_Metric_b  Metric_c  \
0        10              kg        11              mg        15   
1        12              kg        21              mg        25   
2       130              kg        41              mg        35   

  Status_Metric_c  
0              ml  
1              ml  
2              ml  

关于python - Pandas 根据左侧的列重命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42972600/

相关文章:

python - 如何指定scapy启动文件?

python - 使用正则表达式重命名 Pandas 数据框中的列

python - 根据列名的条件对 pandas dataframe 列值求和

python - Pandas read_html 返回原始 HTML 内容[对于某些行/单元格/等]

python - 对数据框中的值进行四舍五入并丢失小数点

python - pyzmq 上下文有时初始化很慢

python - GCP Python3 启动脚本问题

python - 在 Python 中实现 PCA(基于特征向量)

python - 如何更新 Tix.ComboBox 的文本?

python - 特定累积变化后的变化值