如何根据索引

时间:2018-07-23 19:36:38

标签: python pandas

编码新手,请原谅我缺乏知识
我目前有一个数据框,如下所示:

date         A     B    C    
2006-11-01   NaN   1    NaN
2016-11-02   NaN   NaN  1
2016-11-03   1     NaN  NaN
2016-11-04   NaN   1    NaN
2016-11-05   NaN   1    NaN
2016-11-06   NaN   NaN  NaN
2016-11-07   NaN   1    NaN

例如,我想做的是:
在2016-11-03之后的所有日期中,将A列中的所有NaN替换为0,并且能够对每列执行相同的操作,但是使用不同的对应日期。

我尝试了

for col in df:
    if col == 'A' & 'date' > '2016-11-03':
        value_1 = {'A':0}
        df = df.fillna(value=value_1)

但我收到此错误TypeError: unsupported operand type(s) for &: 'str' and 'str'
我确定这与我缺乏知识有关,但是我不确定如何进行。

编辑:我正在寻找的是这样的:

date         A     B    C    
2006-11-01   NaN   1    NaN
2016-11-02   NaN   NaN  1
2016-11-03   1     NaN  NaN
2016-11-04   0     1    NaN
2016-11-05   0     1    NaN
2016-11-06   0     NaN  NaN
2016-11-07   0     1    NaN

3 个答案:

答案 0 :(得分:3)

条件由两部分组成:在特定日期之后和为NaN。

condition = (df['date'] > '2016-11-03') & df['A'].isnull()

现在,选择与条件匹配的行并使A列中的各个项目等于0:

df.loc[condition, 'A'] = 0

答案 1 :(得分:0)

df.loc[(df.date > '2016-11-03') & (df['A'].isnull()),'A'] = 0;

输出:

A   B   C   date
0   NaN 1.0 NaN 2006-11-01
1   NaN NaN 1.0 2016-11-02
2   1.0 NaN NaN 2016-11-03
3   0.0 1.0 NaN 2016-11-04
4   0.0 1.0 NaN 2016-11-05
5   0.0 NaN NaN 2016-11-06
6   0.0 1.0 NaN 2016-11-07

答案 2 :(得分:0)

您可以使用fillna,将空行替换为零

  

if condition == 'A':
fillna(0, inplace = True)