我有一个数据帧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
答案 0 :(得分:1)
您可以使用cells
的最后一个字母创建的新系列GroupBy.apply
加ffill
,bfill
和form 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