开发者社区 问答 正文

根据一个分类列和另一个列的值创建列

我的数据是这样的

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

展开
收起
kun坤 2019-12-25 10:04:31 429 分享
分享
版权
举报
阿里云 AI 助理回答

在不使用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内置的高效方法会更合适。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: