Python 在单个列中混合所有列的信息

Python 在单个列中混合所有列的信息,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,我有这样一个数据集: df = pd.DataFrame({'ID':["a"," b", "c","d", "e"], 'P1': [10, 28, 34, 56, 78], 'P2':[ 90, 54, 54, 32, 16], 'P3':[14, 15, 24, 90,34]}) 其中包含每个问题的学生分

我有这样一个数据集:

df = pd.DataFrame({'ID':["a"," b", "c","d", "e"],
               'P1': [10, 28, 34, 56, 78],
              'P2':[ 90, 54, 54, 32, 16],
              'P3':[14, 15, 24, 90,34]})
其中包含每个问题的学生分数。我需要创建一个名为“Notes”的新专栏 在一列中包含所有问题的等级。 输出必须如下所示:

在使用iloc访问器隔离所需列后,请尝试记录

df['notes']=df.iloc[:,1:].to_dict('records')
如果您需要包含总计,我们可以使用列过滤器,按如下方式分配总计和注释

df=df.assign(Total=df.filter(regex='^P', axis=1).sum(1),notes=df.filter(regex='^P', axis=1).to_dict('records'))
如果dict括号有问题。你可以把它们脱掉

df.notes.astype(str).str.strip('{}')
使用:


尝试使用
lambda
map

p_val = df.filter(like='P')

comb = lambda x: [f"{key}:{val}" for key,val in zip(p_val.columns, x)] 
df['Notes'] = pd.Series(list(map(comb,p_val.values.tolist()))).str.join(',')

df:

    ID  P1  P2  P3  Notes
0   a   10  90  14  P1:10,P2:90,P3:14
1   b   28  54  15  P1:28,P2:54,P3:15
2   c   34  54  24  P1:34,P2:54,P3:24
3   d   56  32  90  P1:56,P2:32,P3:90
4   e   78  16  34  P1:78,P2:16,P3:34

以防万一,如果有人无法通过
.iloc[:,1:://code>
df.filter(like='P')访问特定列,请记录('records')
感谢@Pygirl的建议。Ws正在添加该内容。我更喜欢以P
^P
@ansev开头的正则表达式我们不应该仅仅为了用
替换
而提供过于复杂的解决方案。我提倡可读代码。如果有一种方法,我不需要重新发明wheel@ansev,什么会阻止他
df.notes.astype(str.str.strip(“{}”)
?还是用一段更简短易读的代码来回答问题?
    ID  P1  P2  P3  Notes
0   a   10  90  14  P1:10,P2:90,P3:14
1   b   28  54  15  P1:28,P2:54,P3:15
2   c   34  54  24  P1:34,P2:54,P3:24
3   d   56  32  90  P1:56,P2:32,P3:90
4   e   78  16  34  P1:78,P2:16,P3:34