gpt4 book ai didi

python - 如何根据每组的条件屏蔽列中的值

转载 作者:行者123 更新时间:2023-12-05 01:25:14 24 4
gpt4 key购买 nike

我有这样的 pandas DataFrame:

data = {'ID_1':['A', 'A','A', 'B', 'B', 'B'],
'ID_2':[1, 2, 2, 1, 1, 2],
'DATE':['2021-11-21', '2021-12-19', '2021-09-05', '2021-11-07', '2021-12-05','2021-12-26'],
'VALUE': [0.5, 0.5, 0.5, 0.6, 0.6, 0.6]}

df = pd.DataFrame(data)

我想在 'VALUE' 列中保留 'ID_1' 子集的 'DATE' 列中的最低日期值> 和 'ID_2'
所需的输出如下所示:

data = {'ID_1':['A', 'A','A', 'B', 'B', 'B'],
'ID_2':[1, 2, 2, 1, 1, 2],
'DATE':['2021-11-21', '2021-12-19', '2021-09-05', '2021-11-07', '2021-12-05','2021-12-26'],
'VALUE': [0.5, np.NaN, 0.5, 0.6, np.NaN, 0.6]}

df = pd.DataFrame(data)

我尝试的是创建两次对该数据帧进行分组的函数,但我以 ValueError Length of values (2) does not match length of index (1)

我的功能:

def foo(val):

def add_mask(val):
val.reset_index(inplace=True)
min_date = val['DATE'].min()
mask = val.DATE == min_date
return val[mask]

return val.groupby('ID_1').apply(add_mask)

test = df.groupby('ID_2').apply(foo)

最佳答案

您可以 groupby你的两个 ID 列并用 transform('min') 计算最小值, 然后 mask值不相等的数据:

df['VALUE'] = df['VALUE'].mask(df['DATE'].ne(df.groupby(['ID_1', 'ID_2'])['DATE'].transform('min')))

输出:

  ID_1  ID_2        DATE  VALUE
0 A 1 2021-11-21 0.5
1 A 2 2021-12-19 NaN
2 A 2 2021-09-05 0.5
3 B 1 2021-11-07 0.6
4 B 1 2021-12-05 NaN
5 B 2 2021-12-26 0.6

关于python - 如何根据每组的条件屏蔽列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70968634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com