如何为pandas中的所有列值添加前缀

2024-10-01 07:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下熊猫数据框

 Date        stockA     stockB     stockC     stockD   stockE
 2020-01-01  1          1          2          1        3
 2020-01-01  1          2          2          1        2
 2020-01-01  1          1          3          2        1
 2020-01-01  3          1          2          1        2

我想为每列添加前缀,例如stockA:01、stockB:02等等

我想要的数据帧是

 Date        stockA     stockB     stockC     stockD   stockE
 2020-01-01  011         021        032        041     053
 2020-01-01  011         022        032        041     052
 2020-01-01  011         021        033        042     051
 2020-01-01  013         021        032        041     052

我也有25列。我怎样才能在熊猫身上做呢


Tags: 数据datestockbstockastockcstockdstocke
3条回答

一个更麻烦但可能更可读的解决方案:

v = [1,23,33]
cols = {'A': v, 'B': v, 'C': v, 'D': v, 'E': v,
        'F': v, 'G': v, 'H': v, 'I': v, 'J': v}

df = pd.DataFrame(data = cols,
                  index = ['2020-01-01']*3,
                  columns = cols)

for n, col in enumerate(df.columns, 1):
    df[col] = str(n).zfill(2) + df[col].astype(str)

>>
               A     B     C     D     E     F     G     H     I     J
2020-01-01   011   021   031   041   051   061   071   081   091   101
2020-01-01  0123  0223  0323  0423  0523  0623  0723  0823  0923  1023
2020-01-01  0133  0233  0333  0433  0533  0633  0733  0833  0933  1033

尝试使用^{}

m = df.set_index('Date')
#add prefix 0X if less than 10 else add prefix X
m = m.astype(str).radd([f"0{i}" if i<10 else f"{i}" 
                 for i in range(1,m.shape[1]+1)]).reset_index()

print(m)
         Date stockA stockB stockC stockD stockE
0  2020-01-01    011    021    032    041    053
1  2020-01-01    011    022    032    041    052
2  2020-01-01    011    021    033    042    051
3  2020-01-01    013    021    032    041    052

使用:

m = df.columns.str.contains('stock')
cols_change = df.columns[m]
num = ('0'+pd.Index(range(1,len(cols_change)+1)).astype(str)).str[-2:]

df.columns = df.columns[~m].tolist()+[f'{name}:{n}' for n,name in zip(num,cols_change)]
print(df)
         Date  stockA:01  stockB:02  stockC:03  stockD:04  stockE:05
0  2020-01-01          1          1          2          1          3
1  2020-01-01          1          2          2          1          2
2  2020-01-01          1          1          3          2          1
3  2020-01-01          3          1          2          1          2

或与^{}

cols_change = df.columns.difference(['Date'])
num = ('0'+pd.Index(range(1,len(cols_change)+1)).astype(str)).str[-2:]

df.columns = ['Date']+[f'{name}:{n}' for n,name in zip(num,cols_change)]

相关问题 更多 >