我有以下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
答案 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.