Python 3.x 添加列-指定名称-基于其他列的行值
我有这样一个数据帧:Python 3.x 添加列-指定名称-基于其他列的行值,python-3.x,pandas,Python 3.x,Pandas,我有这样一个数据帧: 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
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
对于每个列(类型列旁边),此处A、B、C:
- 添加名为column\u name\u的新列
- 如果类型=X加4,如果类型=Y加6,如果Z加7
系列
创建,使用字典创建,通过以下方式添加到列的原始和最后更改顺序:
编辑:对于不匹配的值,创建字典时会丢失值,因此如果添加字典,则会为所有其他值返回值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
Idea是由helper创建的多个值
系列
,使用字典创建,添加到原始的by和列的最后更改顺序by:
编辑:对于不匹配的值,创建字典时会丢失值,因此如果添加字典,则会为所有其他值返回值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
非常好,谢谢!如果我有更多的行,每行x加4,y加6,每其他行加7。没有用每个值定义字典。有解决方案吗?@anky_91-Yop,我同意,但我喜欢更一般的解决方案,所以
。pivot(*d)
如果更像3列,则会失败,所以我不使用它。非常好,谢谢!如果我有更多的行,每行x加4,y加6,每其他行加7。没有用每个值定义字典。有解决方案吗?@anky_91-Yop,我同意,但我喜欢更一般的解决方案,所以.pivot(*d)
如果更像3列,则会失败,所以我不使用它。