添加列-指定名称-基于其他的行值



我有一个这样的数据帧:

data = {'TYPE':['X', 'Y', 'Z'],'A': [11,12,13], 'B':[21,22,23], 'C':[31,32,34]}
df = pd.DataFrame(data)
TYPE  A   B   C
0   X     11  21  31
1   Y     12  22  32
2   Z     13  23  34

我喜欢得到以下数据帧:

TYPE  A   A_added  B   B_added  C   C_added
0   X     11  15       21  25       31  35
1   Y     12  18       22  28       32  38
2   Z     13  20       23  30       34  40

对于每列(TYPE列旁边(,此处为A、B、C:

  • 添加一个名为column_name_aded 的新列

  • 如果TYPE=X加4,如果TYPE=Y加6,如果Z加7

Idea是由助手Series创建的多个值,由Series.map创建,字典为DataFrame.add,由DataFrame.join添加到原始值,并由DataFrame.reindex添加列的最后更改顺序:

d = {'X':4,'Y':6, 'Z':7}
cols = df.columns[:1].tolist() + [i for x in df.columns[1:] for i in (x, x + '_added')]
df1 = df.iloc[:, 1:].add(df['TYPE'].map(d), axis=0, fill_value=0).add_suffix('_added')
df2 = df.join(df1).reindex(cols, axis=1)
print (df2)
TYPE   A  A_added   B  B_added   C  C_added
0    X  11       15  21       25  31       35
1    Y  12       18  22       28  32       38
2    Z  13       20  23       30  34       41

编辑:对于不匹配的值,字典会创建缺少值的值,所以如果添加Series.fillna,它会为所有其他值返回值7

d = {'X':4,'Y':6}
cols = df.columns[:1].tolist() + [i for x in df.columns[1:] for i in (x, x + '_added')]
df1 = df.iloc[:, 1:].add(df['TYPE'].map(d).fillna(7).astype(int), axis=0).add_suffix('_added')
df2 = df.join(df1).reindex(cols, axis=1)
print (df2)
TYPE   A  A_added   B  B_added   C  C_added
0    X  11       15  21       25  31       35
1    Y  12       18  22       28  32       38
2    Z  13       20  23       30  34       41