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