首页 > 解决方案 > groupby 日期并检查多列中的值是否相等

问题描述

我有一个具有以下格式的数据框

      X       Y        date
0   10.0     NaN  2018-12-27
1   20.0    40.0  2018-12-27
2   15.0     NaN  2018-12-24
3    NaN    20.0  2018-12-27

我正在尝试按日期分组并检查 X 中的值是否等于特定日期的 Y 中的值。

我尝试了以下逻辑,但似乎不起作用。

are_equal = df.groupby('date').apply(lambda g: (g.X == g.Y).sum())
df['are_equal'] = df.date.map(are_equal)

所需的输出是一个标志,表明索引 1 和 3 相等。

标签: pythonpandasdataframegroup-by

解决方案


与 一起使用Series.isin

f = lambda g: g.X.fillna('no match').isin(g.Y) | g.Y.fillna('no match').isin(g.X)
df['are_equal'] = df.groupby('date', group_keys=False).apply(f)
print (df)
      X     Y        date  are_equal
0  10.0   NaN  2018-12-27      False
1  20.0  40.0  2018-12-27       True
2  15.0   NaN  2018-12-24      False
3   NaN  20.0  2018-12-27       True

推荐阅读