Python 在group by中广播给定逻辑条件的值
我有一个数据框架,如下例所示: 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您需要: 你可以做: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
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