使用公式将值复制到新列

时间:2015-12-16 16:28:54

标签: python python-3.x pandas

我有以下DataFrame

  geo col1  col2
0  CA    A     1
1  CA    A     2
2  CA    B     1
3  CA    B     2
4  CA    B     1
5  CA    C     1
6  CA    C     2

我的目标是创建一个新的column,如果col2复制col2 == 1的值,则复制col1 col2 == 2的值。

geo列包含在图像中,因为最终我想创建一个if语句,对美国15-20个州的上述情况略有不同。

最终目标如下:

  geo col1  col2 col3
0  CA    A     1    1
1  CA    A     2    A
2  CA    B     1    1
3  CA    B     2    B
4  CA    B     1    1
5  CA    C     1    1
6  CA    C     2    C

3 个答案:

答案 0 :(得分:1)

您可以将条件复制语句包装到函数中,以使各种案例更易于管理(see docs)

def copy_function(row):
    if row['col2']==1:
        return row['col2'] 
    else: 
        return row['col1']
df['col3'] = df.apply(copy_function, axis=1)

答案 1 :(得分:0)

希望这会有所帮助。

for row in rows:
    row['col3'] = row['col1'] if row['col2'] == 2 else row['col2']

答案 2 :(得分:0)

您可以使用列表理解:

df['col3'] = [c2 if c2 == 1 else (c1 if c2 == 2 else None) 
              for c1, c2 in zip(df.col1, df.col2)]

>>> df
  geo col1  col2 col3
0  CA    A     1    1
1  CA    A     2    A
2  CA    B     1    1
3  CA    B     2    B
4  CA    B     1    1
5  CA    C     1    1
6  CA    C     2    C

鉴于您的评论中陈述了您的例外情况,您还可以使用iterrows

df['col3'] = None
for n, row in df.iterrows():
    if row.col2 == 1:
        df.ix[n, 'col3'] = row.col2
    elif row.col2 == 2:
        df.ix[n, 'col3'] = row.col1
    # Other cases.