填写特定条件栏中的空白

时间:2018-03-26 07:21:48

标签: python-3.x pandas

我有一个数据帧df1:

Site    cells   technology  npv
T21079  G21079A UMTS900 76
T21079  G21079B UMTS900 
T21079  G21079C UMTS900 
T21079  U21079A UMTS2100    6
T21079  U21079B UMTS2100    8
T21079  U21079C UMTS2100    0
T21079  V21079A UMTS2100    6
T21079  V21079B UMTS2100    8
T21079  V21079C UMTS2100    0
T42406  G42406A UMTS900 23
T42406  G42406B UMTS900 56
T42406  G42406C UMTS900 12
T42406  U42406A UMTS2100    
T42406  U42406B UMTS2100    
T42406  U42406C UMTS2100    
T42406  V42406A UMTS2100    465
T42406  V42406B UMTS2100    466
T42406  V42406C UMTS2100    467
T42406  W42406A UMTS2100    
T42406  W42406B UMTS2100    7
T10003  G10003A UMTS900 
T10003  G10003B UMTS900 
T42406  W42406C UMTS2100    
T15805  G15805A UMTS900 369
T15805  G15805B UMTS900 370
T15805  G15805C UMTS900 371
T15805  U15805A UMTS2100    369
T15805  U15805B UMTS2100    
T15805  U15805C UMTS2100    
T15805  W15805A UMTS2100    369
T15805  W15805B UMTS2100    370
T15805  W15805C UMTS2100    371

我想要数据帧df2,以便我想填补" npv"中的空白。列基于某些条件。

条件首先考虑具有空白" npv"的单元格。如果具有相同技术的任何其他单元具有相同的站点名称并且如果单元的最后一个字母匹配,例如V42406A& W42406A,然后复制" npv" V42406A至W42406A。 如果在站点中,没有其他单元格在同一技术中以相同的最后一个字母结尾,则从具有相同最后一个字母的同一站点中的其他技术单元格复制该值

  

e.g。 G21079B& U21079B,然后复制" npv" G21079B至U21079B。

如果站点中没有其他单元格以站点中的相同最后一个字母结尾,则将其留空。 因此,我得到的数据帧df2应该是这样的:

Site    cells   technology  npv
T21079  G21079A UMTS900 76
T21079  G21079B UMTS900 8
T21079  G21079C UMTS900 0
T21079  U21079A UMTS2100    6
T21079  U21079B UMTS2100    8
T21079  U21079C UMTS2100    0
T21079  V21079A UMTS2100    6
T21079  V21079B UMTS2100    8
T21079  V21079C UMTS2100    0
T42406  G42406A UMTS900 23
T42406  G42406B UMTS900 56
T42406  G42406C UMTS900 12
T42406  U42406A UMTS2100    465
T42406  U42406B UMTS2100    466
T42406  U42406C UMTS2100    467
T42406  V42406A UMTS2100    465
T42406  V42406B UMTS2100    466
T42406  V42406C UMTS2100    467
T42406  W42406A UMTS2100    465
T42406  W42406B UMTS2100    7
T10003  G10003A UMTS900 
T10003  G10003B UMTS900 
T42406  W42406C UMTS2100    467
T15805  G15805A UMTS900 369
T15805  G15805B UMTS900 370
T15805  G15805C UMTS900 371
T15805  U15805A UMTS2100    369
T15805  U15805B UMTS2100    370
T15805  U15805C UMTS2100    371
T15805  W15805A UMTS2100    369
T15805  W15805B UMTS2100    370
T15805  W15805C UMTS2100    371

1 个答案:

答案 0 :(得分:1)

您可以使用cells的最后一个字母创建的新系列GroupBy.applyffillbfillform attribute前后填充NaN:< / p>

last= df['cells'].str[-1]
df['npv'] = df.groupby(['Site','technology',last])['npv'].apply(lambda x: x.ffill().bfill())
df['npv'] = df.groupby(['Site', last])['npv'].apply(lambda x: x.ffill().bfill())
print (df)
      Site    cells technology    npv
0   T21079  G21079A    UMTS900   76.0
1   T21079  G21079B    UMTS900    8.0
2   T21079  G21079C    UMTS900    0.0
3   T21079  U21079A   UMTS2100    6.0
4   T21079  U21079B   UMTS2100    8.0
5   T21079  U21079C   UMTS2100    0.0
6   T21079  V21079A   UMTS2100    6.0
7   T21079  V21079B   UMTS2100    8.0
8   T21079  V21079C   UMTS2100    0.0
9   T42406  G42406A    UMTS900   23.0
10  T42406  G42406B    UMTS900   56.0
11  T42406  G42406C    UMTS900   12.0
12  T42406  U42406A   UMTS2100  465.0
13  T42406  U42406B   UMTS2100  466.0
14  T42406  U42406C   UMTS2100  467.0
15  T42406  V42406A   UMTS2100  465.0
16  T42406  V42406B   UMTS2100  466.0
17  T42406  V42406C   UMTS2100  467.0
18  T42406  W42406A   UMTS2100  465.0
19  T42406  W42406B   UMTS2100    7.0
20  T10003  G10003A    UMTS900    NaN
21  T10003  G10003B    UMTS900    NaN
22  T42406  W42406C   UMTS2100  467.0
23  T15805  G15805A    UMTS900  369.0
24  T15805  G15805B    UMTS900  370.0
25  T15805  G15805C    UMTS900  371.0
26  T15805  U15805A   UMTS2100  369.0
27  T15805  U15805B   UMTS2100  370.0
28  T15805  U15805C   UMTS2100  371.0
29  T15805  W15805A   UMTS2100  369.0
30  T15805  W15805B   UMTS2100  370.0
31  T15805  W15805C   UMTS2100  371.0