gpt4 book ai didi

python-3.x - 如何在每组pandas groupby对象中添加flag列

转载 作者:行者123 更新时间:2023-12-04 10:57:37 24 4
gpt4 key购买 nike

我有三列的 df X , Y , Z .我要申请 groupby基于 X 对数据进行分组的函数.然后我想插入 flag每组中的列。标志列的条件是如果列 Z 30% 的值大于 1.5,然后为 group 添加标志列值 1。如果列Z 30% 的值不大于 1.5,然后为 group 添加标志列值 0。

这是我的示例 df:

 df = pd.DataFrame({'X':['1', '1', '1' ,'1', '1', '2','2','2','2','2','2','3','3','3'],'Y':["34","45","33","45","44", "66",'67','23','34','10','11','13','12','14'],'Z':["1.2","1.3","1.6","1.7","1.8", "0",'0','0','1.8','1.2','1.3','1.6','1.7','1.8']})
X Y Z
0 1 34 1.2
1 1 45 1.3
2 1 33 1.6
3 1 45 1.7
4 1 44 1.8
5 2 66 0
6 2 67 0
7 2 23 0
8 2 34 1.8
9 2 10 1.2
10 2 11 1.3
11 3 13 1.6
12 3 12 1.7
13 3 14 1.8

想要的结果:
df_result= pd.DataFrame({'X':['1', '1', '1' ,'1', '1', '2','2','2','2','2','2','3','3','3'],'Y':["34","45","33","45","44", "66",'67','23','34','10','11','13','12','14'],'Z':["1.2","1.3","1.6","1.7","1.8", "0",'0','0','1.8','1.2','1.3','1.6','1.7','1.8'],'flag':["1","1","1","1","1", "0",'0','0','0','0','0','1','1','1']})
print(df_result)
X Y Z flag
0 1 34 1.2 1
1 1 45 1.3 1
2 1 33 1.6 1
3 1 45 1.7 1
4 1 44 1.8 1
5 2 66 0 0
6 2 67 0 0
7 2 23 0 0
8 2 34 1.8 0
9 2 10 1.2 0
10 2 11 1.3 0
11 3 13 1.6 1
12 3 12 1.7 1
13 3 14 1.8 1

最佳答案

使用 GroupBy.transform 使用 lambda 函数并通过 Series.astype 将 bool 值转换为整数:

df["Z"]= df["Z"].astype(float)

f = lambda x: (x > 1.5).sum() > len(x) *.3
#if necessary convert 30% to integer by ceil
#f = lambda x: (x > 1.5).sum() > np.ceil(len(x) *.3)
df['flag'] = df.groupby("X")["Z"].transform(f).astype(int)
print (df)
X Y Z flag
0 1 34 1.2 1
1 1 45 1.3 1
2 1 33 1.6 1
3 1 45 1.7 1
4 1 44 1.8 1
5 2 66 0.0 0
6 2 67 0.0 0
7 2 23 0.0 0
8 2 34 1.8 0
9 2 10 1.2 0
10 2 11 1.3 0
11 3 13 1.6 1
12 3 12 1.7 1
13 3 14 1.8 1

关于python-3.x - 如何在每组pandas groupby对象中添加flag列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59081539/

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