在熊猫数据框中获取每个组的第一条记录,并在其他记录中放入0

时间:2019-05-08 08:24:03

标签: python pandas

我有一个熊猫数据框df

s = {'id': [243,243, 243, 243,443,443,443],
 'st': [1,3,5,9,2,6,7],
 'value':[2.4, 3.8, 3.7, 5.6, 1.2, 0.2, 2.1]}
df = pd.DataFrame(s)

如下所示:

    id  st  value
0  243   1    2.4
1  243   3    3.8
2  243   5    3.7
3  243   9    5.6
4  443   2    1.2
5  443   6    0.2
6  443   7    2.1

除了每个value的第一条记录外,我想为所有记录将0设为id。我的预期输出是:

    id  st  value
0  243   1    2.4
1  243   3    0
2  243   5    0
3  243   9    0
4  443   2    1.2
5  443   6    0
6  443   7    0

如何使用熊猫数据框来做到这一点?

4 个答案:

答案 0 :(得分:2)

这是检查id中重复项并将boolean结果乘以value的一种方法:

df['value'] = (~df.id.duplicated('first')).mul(df.value)

    id  st  value
0  243   1    2.4
1  243   3    0.0
2  243   5    0.0
3  243   9    0.0
4  443   2    1.2
5  443   6    0.0
6  443   7    0.0

答案 1 :(得分:2)

另一种方法是:

df.loc[df.id.eq(df.id.shift()),'value']=0
print(df)

    id  st  value
0  243   1    2.4
1  243   3    0.0
2  243   5    0.0
3  243   9    0.0
4  443   2    1.2
5  443   6    0.0
6  443   7    0.0

答案 2 :(得分:1)

使用Series.duplicatedDataFrame.loc通过掩码使用numpy.where设置值:

df.loc[df['id'].duplicated(), 'value'] = 0

或者:

df['value'] = np.where(df['id'].duplicated(), 0, df['value'])
print (df)
    id  st  value
0  243   1    2.4
1  243   3    0.0
2  243   5    0.0
3  243   9    0.0
4  443   2    1.2
5  443   6    0.0
6  443   7    0.0

答案 3 :(得分:0)

尝试一下:

tf=df['id'].duplicated() # True and False
df.loc[tf,"value"]=0 # replace values in value with 0 for trues only
print(df)