如何用Python中DataFrame指定列的唯一值动态创建新列?
用DataFrame某列唯一值动态创建新列的方法
方法一:用pandas内置函数(最简便)
pandas的get_dummies()可以自动识别目标列的所有唯一值,生成对应新列,完全适配任意数量的唯一值,新手直接用就行。
先构造你的示例数据:
import pandas as pd # 创建示例DataFrame data = {'Column1': ['Apple', 'Apple', 'Banana', 'Strawberry', 'Strawberry', 'Strawberry']} df = pd.DataFrame(data)
调用函数生成新列:
# 生成新列并合并到原DataFrame df = pd.get_dummies(df, columns=['Column1'], prefix='', prefix_sep='')
最终结果会是这样:
| Apple | Banana | Strawberry |
|---|---|---|
| 1 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
| 0 | 0 | 1 |
| 0 | 0 | 1 |
方法二:手动循环实现(适合理解逻辑)
如果想搞清楚每一步的原理,可以手动遍历唯一值创建列,步骤很清晰:
- 先获取目标列的所有唯一值
- 逐个遍历这些值,创建对应新列,用1/0标记原列是否等于当前值
代码示例:
import pandas as pd # 创建示例DataFrame data = {'Column1': ['Apple', 'Apple', 'Banana', 'Strawberry', 'Strawberry', 'Strawberry']} df = pd.DataFrame(data) # 获取Column1的唯一值列表 unique_values = df['Column1'].unique() # 遍历每个唯一值创建新列 for value in unique_values: # 新列名就是唯一值,匹配到就设为1,否则为0 df[value] = (df['Column1'] == value).astype(int) # 不需要原列的话可以删掉 # df.drop('Column1', axis=1, inplace=True)
运行后得到的结果和方法一完全一致,这种方式更直观,适合新手理解底层逻辑。
内容的提问来源于stack exchange,提问作者DG572
相关产品推荐
相关产品推荐

