Pandas动态列创建

时间:2014-02-21 15:32:27

标签: pandas

我正在尝试根据另一列的值动态创建新列。 假设我有以下数据框

A | B
11个| 1个
22个| 0
33个| 1个
44个| 1个
55个| 0

我想创建一个新列。 如果列B的值为1,则插入'Y',否则插入'N'。 结果数据框应如下所示:

A | B | C
11 | 1 | Y
22 | 0 | N
33 | 1 | Y
44 | 1 | Y
55 | 0 | N

我可以通过迭代列值来实现这一点,

for i in dataframe['B'].values:
    if i==1:
        add Y to Series
    else:
        add N to Series

dataframe['C'] = Series

但是,我担心这会严重降低性能,特别是因为我的数据集包含500,000多行。 任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:3)

使用loc避免链式索引。大熊猫中有returning a view versus a copynumpy

相关的细微差别
df['C'] = 'N'
df.loc[df.B == 1, 'C'] = 'Y'

答案 1 :(得分:1)

试试这个:

df['C'] = 'N'
df['C'][df['B']==1] = 'Y'

应该更快。