有条件地写入xlsx

时间:2018-12-31 08:07:07

标签: python pandas

伙计,

我目前正在使用庞大的Excel工作表,python 3.7.1和pandas 0.23.4。 我的任务是根据条件匹配写入单元格。像这样:

val = lincoln@gmx.net
if val in Cell_3A:
    write something to Cell_3B

作为一个完整的例子,让我们说以下是我的数据框:

    Email               Protection
1   lincoln@gmail.net
2   obama@gmail.net
3   trump@gmail.net
4   franklin@gmail.net

我想写下所有第3行中的电子邮件,所有电子邮件均受保护。因此,完成的数据框应如下所示:

    Email               Protection
1   lincoln@gmail.net   on
2   obama@gmail.net     on
3   trump@gmail.net     off
4   franklin@gmail.net  on

我该如何实现?

2 个答案:

答案 0 :(得分:7)

过滤电子邮件不为Protection的{​​{1}}列,并将其分配为“ on”,反之亦然。

'trump@gmail.net'

使用df.loc[df['Email']!='trump@gmail.net', 'Protection']='on' df.loc[df['Email']=='trump@gmail.net', 'Protection']='off'

np.where

或:

df['Protection'] = np.where((df['Email']!='trump@gmail.net'),'on','off')

答案 1 :(得分:3)

基于if和else条件的另一个解决方案:

DataFrame:

>>> df
                Email Protection
0   lincoln@gmail.net
1     obama@gmail.net
2     trump@gmail.net
3  franklin@gmail.net

结果:

>>> df['Protection'] = ['On' if x !="trump@gmail.net"  else 'Off' for x in df['Email']]
 # df['Protection'] = ['Off' if x =="trump@gmail.net"  else 'On' for x in df['Email']]
>>> df
                Email Protection
0   lincoln@gmail.net         On
1     obama@gmail.net         On
2     trump@gmail.net        Off
3  franklin@gmail.net         On