Pandas groupby 与 isin 连续组
Pandas groupby with isin for consecutive groups
我有一个如下所示的数据框:
arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6])
我想要的输出是布尔值,表示第 2 列中的值是否在下一个连续组中。这些组由第 1 列中的值表示。例如,4 出现在第 0 组中,下一个连续的组,第 1 组:
output = pd.DataFrame([[False],[False],[True],[False],[True],[True],[Nan],[Nan],[Nan]])
第 2 组的输出将为 Nan,因为第 3 组不存在。
到目前为止我试过这个:
output = arr.groupby([0])[1].isin(arr.groupby([0])[1].shift(periods=-1))
这不起作用,因为我无法在 groupby series
上应用 isin()
。
您可以创建一个包含移动组项目列表的辅助列,然后使用 returns True
、False
of NaN
的函数对其进行检查:
import pandas as pd
import numpy as np
arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6]])
arr = pd.merge(arr, arr.groupby([0]).agg(list).shift(-1).reset_index(), on=[0], how='outer')
def check_columns(row):
try:
if row['1_x'] in row['1_y']:
return True
else:
return False
except:
return np.nan
arr.apply(check_columns, axis=1)
结果:
0 False
1 False
2 True
3 False
4 True
5 True
6 NaN
7 NaN
8 NaN
我有一个如下所示的数据框:
arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6])
我想要的输出是布尔值,表示第 2 列中的值是否在下一个连续组中。这些组由第 1 列中的值表示。例如,4 出现在第 0 组中,下一个连续的组,第 1 组:
output = pd.DataFrame([[False],[False],[True],[False],[True],[True],[Nan],[Nan],[Nan]])
第 2 组的输出将为 Nan,因为第 3 组不存在。
到目前为止我试过这个:
output = arr.groupby([0])[1].isin(arr.groupby([0])[1].shift(periods=-1))
这不起作用,因为我无法在 groupby series
上应用 isin()
。
您可以创建一个包含移动组项目列表的辅助列,然后使用 returns True
、False
of NaN
的函数对其进行检查:
import pandas as pd
import numpy as np
arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6]])
arr = pd.merge(arr, arr.groupby([0]).agg(list).shift(-1).reset_index(), on=[0], how='outer')
def check_columns(row):
try:
if row['1_x'] in row['1_y']:
return True
else:
return False
except:
return np.nan
arr.apply(check_columns, axis=1)
结果:
0 False
1 False
2 True
3 False
4 True
5 True
6 NaN
7 NaN
8 NaN