Python 在group by中广播给定逻辑条件的值

Python 在group by中广播给定逻辑条件的值,python,pandas,transform,Python,Pandas,Transform,我有一个数据框架,如下例所示: key1 key2 value1 1 201501 NaN 1 201502 NaN 1 201503 201503 1 201504 NaN 2 201507 NaN 2 201508 NaN 2 201509 NaN 3 201509 NaN 3

我有一个数据框架,如下例所示:

key1 key2 value1 1 201501 NaN 1 201502 NaN 1 201503 201503 1 201504 NaN 2 201507 NaN 2 201508 NaN 2 201509 NaN 3 201509 NaN 3 201510 201509 3 201511 NaN 3 201512 NaN 3 201513 NaN IIUC您需要:

IIUC您需要:

你可以做:

df['value2'] = df.groupby('key1')['value1'].apply(lambda x: (~pd.isnull(x)).cumsum())

In [50]: df
Out[50]:
key1    key2  value1  value2
0      1  201501     NaN       0
1      1  201502     NaN       0
2      1  201503  201503       1
3      1  201504     NaN       1
4      2  201507     NaN       0
5      2  201508     NaN       0
6      2  201509     NaN       0
7      3  201509     NaN       0
8      3  201510  201509       1
9      3  201511     NaN       1
10     3  201512     NaN       1
11     3  201601     NaN       1
你可以做:

df['value2'] = df.groupby('key1')['value1'].apply(lambda x: (~pd.isnull(x)).cumsum())

In [50]: df
Out[50]:
key1    key2  value1  value2
0      1  201501     NaN       0
1      1  201502     NaN       0
2      1  201503  201503       1
3      1  201504     NaN       1
4      2  201507     NaN       0
5      2  201508     NaN       0
6      2  201509     NaN       0
7      3  201509     NaN       0
8      3  201510  201509       1
9      3  201511     NaN       1
10     3  201512     NaN       1
11     3  201601     NaN       1

您能否解释所需的输出,因为不清楚2代表什么值?您可以解释所需的输出,因为不清楚2代表什么值。我可以简单地使用一个值2.fillna(0)来提醒未满足条件的值,因此它应该负责业务。这样我就可以简单地使用一个值2.fillna(0)在提醒价值观不符合条件的情况下,it应注意业务。
df['value2'] = df.groupby('key1')['value1'].ffill()
df.value2 = np.where(df.value2.notnull(),1,0)
print (df)
    key1    key2  value1  value2
0      1  201501     NaN       0
1      1  201502     NaN       0
2      1  201503  201503       1
3      1  201504     NaN       1
4      2  201507     NaN       0
5      2  201508     NaN       0
6      2  201509     NaN       0
7      3  201509     NaN       0
8      3  201510  201509       1
9      3  201511     NaN       1
10     3  201512     NaN       1
11     3  201601     NaN       1
df['value2'] = df.groupby('key1')['value1'].apply(lambda x: (~pd.isnull(x)).cumsum())

In [50]: df
Out[50]:
key1    key2  value1  value2
0      1  201501     NaN       0
1      1  201502     NaN       0
2      1  201503  201503       1
3      1  201504     NaN       1
4      2  201507     NaN       0
5      2  201508     NaN       0
6      2  201509     NaN       0
7      3  201509     NaN       0
8      3  201510  201509       1
9      3  201511     NaN       1
10     3  201512     NaN       1
11     3  201601     NaN       1