将数据框设为
dasz_id sector counts
0 0 dasz_id 2011.0
1 NaN wah11 0.0
2 NaN wah21 0.0
3 0 dasz_id 2012.0
4 NaN wah11 0.0
5 NaN wah21 0.0
我试图获取daz_id值并将其应用于所有行,直到出现新的dasz值,因此所需的输出看起来如下:
dasz_id sector counts
0 2011 dasz_id 2011.0
1 2011 wah11 0.0
2 2011 wah21 0.0
3 2012 dasz_id 2012.0
4 2012 wah11 0.0
5 2012 wah21 0.0
我已经使用apply方法创建了一个函数,该函数用于获取值,但我不知道如何应用其余行的值。 我做错了什么?
def dasz(row):
if row.sector == "dasz_id":
return int(row.counts)
else:
#get previous dasz_id value
e["dasz_id"] = e.apply(dasz, axis = 1)
答案 0 :(得分:2)
我不知道为什么你有重复的索引,但这是一种方式
df['dasz_id'] = df['counts']
df['dasz_id'] = df['dasz_id'].replace({0:np.nan}).ffill()
df
Out[84]:
dasz_id sector counts
0 2011.0 dasz_id 2011.0
1 2011.0 wah11 0.0
2 2011.0 wah21 0.0
0 2012.0 dasz_id 2012.0
1 2012.0 wah11 0.0
2 2012.0 wah21 0.0
答案 1 :(得分:1)
使用你创建的dasz函数和Wen使用的ffill函数,你也可以这样做:
def dasz(row):
if row.sector == "dasz_id":
return row.counts
e["dasz_id"] = e.apply(dasz, axis = 1)
e.ffill(inplace=True)