考虑一个数据框,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
最佳答案
您可以使用mask
和 ffill
(它仅适用于 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.where
和 shift
:
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/