我的数据是这样的
Weight Sex
91.0 male
91.0 male
131.0 female
128.0 female
132.0 female
150.0 male
我想要的是
male female
91.0 0
91.0 0
0 131.0
0 128.0
0 132.0
150.0 0
如何在不使用pd.wide_to_long()函数的情况下实现这一点? 问题来源StackOverflow 地址:/questions/59466266/create-columns-based-on-a-categorical-column-and-values-from-another-column
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在不使用pd.wide_to_long()
函数的情况下,你可以通过Pandas的重塑功能(如pivot_table
或直接操作DataFrame)来实现这样的数据转换。下面是一个简单的示例,展示了如何根据'Sex'列创建新的列,并将'Weight'值分配到相应的性别列中:
import pandas as pd
# 假设df是你的原始DataFrame
data = {'Weight': [91.0, 91.0, 131.0, 128.0, 132.0, 150.0],
'Sex': ['male', 'male', 'female', 'female', 'female', 'male']}
df = pd.DataFrame(data)
# 创建新DataFrame,初始化男性和女性列
new_df = pd.DataFrame(columns=['male', 'female'], index=df.index)
# 根据Sex列的值,将Weight列的值放入对应的性别列中
for idx, row in df.iterrows():
if row['Sex'] == 'male':
new_df.loc[idx, 'male'] = row['Weight']
else:
new_df.loc[idx, 'female'] = row['Weight']
print(new_df)
这段代码首先创建了一个与原DataFrame相同索引的新DataFrame,然后遍历原DataFrame的每一行,根据'Sex'列的值,将'Weight'列的值填入新DataFrame的相应性别列中。这样你就可以得到期望的输出格式了。
请注意,这种方法在处理大数据集时可能不是最高效的,因为它涉及到循环遍历。对于大型数据集,探索向量化操作或其他Pandas内置的高效方法会更合适。