Pandas数据透视如何条件选择Result_Str或Result_Num作为values列
可以实现,你只需要提前将Result_Str和Result_Num合并为一个动态取值的列,再执行透视操作即可,具体操作如下:
步骤1:合并结果列
你提供的样例中两个结果列是互补为空的,优先取Result_Str的值,为空时取Result_Num转字符串后的值,保证结果类型统一:
import numpy as np import pandas as pd # 动态合并两列有效值 df['Result'] = np.where(df['Result_Str'].notna(), df['Result_Str'], df['Result_Num'].astype(str))
如果Result_Num的空值本身为pd.NA/NaN,也可以用更简洁的写法:
df['Result'] = df['Result_Str'].fillna(df['Result_Num'].astype(str))
步骤2:执行透视
直接使用合并后的Result列作为透视的值来源:
pivot_result = df.pivot( index="ClassID", columns="Name", values="Result" ).reset_index()\ .rename_axis(columns=None)\ .fillna('') # 可选:将空值填充为空字符串,匹配你需要的输出格式
执行后得到的pivot_result就是你要求的透视结果。
内容的提问来源于stack exchange,提问作者editi
相关产品推荐
相关产品推荐

