如何基于列值转置并修改Pandas DataFrame
如何基于列值转置并修改Pandas DataFrame
别担心,完全不用手动修改!用Pandas几行代码就能轻松实现这个转换,我给你两种实用的方法,按需选择就行~
首先,先把你的原始数据用Pandas构建出来(方便后续演示):
import pandas as pd df = pd.DataFrame({ 'name': ['foo', 'bar', 'coo'], 'A': [1, 0, 0], 'B': [0, 1, 0], 'C': [0, 0, 1] })
方法一:利用idxmax快速匹配(适合每行只有一个1的场景)
因为你的数据里每行只有一个列值为1,这个方法效率最高:
# 将name列设为索引,方便后续转置匹配 df_indexed = df.set_index('name') # 转置表格后,找到每行值为1对应的name(也就是索引) result = df_indexed.T.idxmax(axis=1).reset_index() # 重命名列,让结构符合需求 result.columns = ['', 'name'] # 设置第一列为索引,让输出格式和你期望的一致 result = result.set_index('')
运行后得到的result就是你想要的表格:
name A foo B bar C coo
方法二:用melt转置筛选(适合更通用的场景)
如果之后你的数据可能出现多个1的情况,这个方法更灵活:
# 把宽表转成长表,拆分出类别、标记和对应的name melted_df = df.melt(id_vars='name', var_name='category', value_name='flag') # 筛选出标记为1的行 filtered_df = melted_df[melted_df['flag'] == 1] # 调整列顺序并设置索引,得到目标结构 result = filtered_df[['category', 'name']].set_index('category')
这个方法的输出和上面完全一致,而且扩展性更强,适合复杂一点的数据集。
这样就不用手动折腾表格啦,用代码一键搞定!
备注:内容来源于stack exchange,提问作者skoleosho97
相关产品推荐
相关产品推荐

