将值应用于pandas列

时间:2017-10-24 17:25:34

标签: python pandas

将数据框设为

    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)

2 个答案:

答案 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)