根据条件在新列中添加值
adding a value in a new column based on conditions
我有一个数据框 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 都存在第二行。如果它存在,我想添加一个新列(假设 num_count),我想在其中添加整数 1。如果每个 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
我该怎么做?
鉴于您要处理 sorted 数据帧,您需要分配 .sort_values(..)
的结果:
<b>df =</b> 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
我有一个数据框 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 都存在第二行。如果它存在,我想添加一个新列(假设 num_count),我想在其中添加整数 1。如果每个 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
我该怎么做?
鉴于您要处理 sorted 数据帧,您需要分配 .sort_values(..)
的结果:
<b>df =</b> 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