根据条件在新列中添加值

时间:2019-11-16 17:53:35

标签: pandas python-3.5

我有一个数据框df:

df = pd.DataFrame({
    'id': ['1', '1', '2', '3', '3', '8','4', '1', '2', '4'],
    'start': ['2017-01-02', '2017-02-01', '2017-03-01', '2017-02-01', '2017-03-01', '2017-04-01', '2017-01-01', '2017-04-01', '2017-05-01', '2017-02-01']
})

df.sort_values(['id', 'start'])

我想查看每个ID是否存在第二行。如果存在,我想在其中添加整数1的地方添加一个新列(比如num_count)。如果每个id或id的最后一行仅存在一行,我想添加0。 这是我想要的输出。

  id num_count       start
0  1         1  2017-01-02
1  1         1  2017-02-01
7  1         0  2017-04-01
2  2         1  2017-03-01
8  2         0  2017-05-01
3  3         1  2017-02-01
4  3         0  2017-03-01
6  4         1  2017-01-01
9  4         0  2017-02-01
5  8         0  2017-04-01

我该怎么做?

1 个答案:

答案 0 :(得分:3)

如果要处理排序数据帧,则需要分配.sort_values(..)的结果:

df = df.sort_values(['id', 'start'])

您可以在此处使用duplicated(..) function [pandas-doc],根据样本输出,您希望将重复数据的 last 项设置为False

因此我们可以分配一个列,例如:

df['num_count'] = df['id'].duplicated('last').astype(int)

然后产生示例输入:

>>> df
  id       start
0  1  2017-01-02
1  1  2017-02-01
7  1  2017-04-01
2  2  2017-03-01
8  2  2017-05-01
3  3  2017-02-01
4  3  2017-03-01
6  4  2017-01-01
9  4  2017-02-01
5  8  2017-04-01
>>> df['num_count'] = df['id'].duplicated('last').astype(int)
>>> df
  id       start  num_count
0  1  2017-01-02          1
1  1  2017-02-01          1
7  1  2017-04-01          0
2  2  2017-03-01          1
8  2  2017-05-01          0
3  3  2017-02-01          1
4  3  2017-03-01          0
6  4  2017-01-01          1
9  4  2017-02-01          0
5  8  2017-04-01          0