#python #pandas #numpy
#python #панды #numpy
Вопрос:
У меня есть фрейм данных, как показано ниже.
d={
'id' :[1,2,3,4,5],
'X1':[25,12,3,7,1],
'X2':[3,45,3,1,6],
'X3':[6,23,9,3,2]
}
df=pd.DataFrame(d, columns=['id','X1','X2','X3'])
выглядит так:
Я хочу добавить столбец need как X4. Но я хочу использовать имя столбца и его значение, как показано ниже. Как использовать имя столбца в качестве переменной?
Ожидаемое значение X4 для первого raw:
X1:25,X2:3,X3:6
Ответ №1:
d={
'id' :[1,2,3,4,5],
'X1':[25,12,3,7,1],
'X2':[3,45,3,1,6],
'X3':[6,23,9,3,2]
}
df=pd.DataFrame(d, columns=['id','X1','X2','X3'])
cols = [col for col in df.columns if 'X' in col]
df['X4'] = df[cols].apply(lambda x: ';'.join([str(x) ":" str(y) for x,y in zip(cols,x.values)]), axis=1)
Вывод
id X1 X2 X3 X4
0 1 25 3 6 X1:25;X2:3;X3:6
1 2 12 45 23 X1:12;X2:45;X3:23
2 3 3 3 9 X1:3;X2:3;X3:9
3 4 7 1 3 X1:7;X2:1;X3:3
4 5 1 6 2 X1:1;X2:6;X3:2
Ответ №2:
Создайте новый столбец X4
с нужной вам композицией.
d={
'id' :[1,2,3,4,5],
'X1':[25,12,3,7,1],
'X2':[3,45,3,1,6],
'X3':[6,23,9,3,2]
}
df=pd.DataFrame(d, columns=['id','X1','X2','X3'])
df = df.assign(X4=lambda dfa: "X1:" dfa["X1"].astype("string")
",X2:" dfa['X2'].astype("string")
",X3:" dfa['X3'].astype("string")
)
выходной сигнал
id X1 X2 X3 X4
1 25 3 6 X1:25,X2:3,X3:6
2 12 45 23 X1:12,X2:45,X3:23
3 3 3 9 X1:3,X2:3,X3:9
4 7 1 3 X1:7,X2:1,X3:3
5 1 6 2 X1:1,X2:6,X3:2
Ответ №3:
Это должно сделать:
df['X4'] = 'X1:' df['X1'].astype(str) ',X2:' df['X2'].astype(str) ',X3:' df['X3'].astype(str)
дает
id X1 X2 X3 X4
0 1 25 3 6 X1:25,X2:3,X3:6
1 2 12 45 23 X1:12,X2:45,X3:23
2 3 3 3 9 X1:3,X2:3,X3:9
3 4 7 1 3 X1:7,X2:1,X3:3
4 5 1 6 2 X1:1,X2:6,X3:2
Более общее и динамическое решение, в котором вы можете просто указать список столбцов в качестве аргумента для df[...].apply()
:
df['X4'] = df[['X1', 'X2', 'X3']].apply(
lambda x: ','.join(df.columns[x.name 1] x.astype(str)), axis=1
)