gpt4 book ai didi

python - 数据框列值与列表的比较

转载 作者:行者123 更新时间:2023-12-04 16:51:00 25 4
gpt4 key购买 nike

考虑这个数据框:

df = pd.DataFrame({'A': [1, 1, 2, 2, 3, 3],
'B': [10, 15, 20, 25, 30,35],
'C': [100, 150, 200, 250, 300, 350]})
这是获取 C 列值的代码,它是每个组的第一行(A 列):
firsts = df.groupby('A').first()['C']
所以第一个将是: (100, 200, 300) .
现在我想添加新的列,它将是 1如果行 C 列的值在 firsts否则将是 0 .


一种

C
D


1
10
100
1

1
15
150
0

2
20
200
1

2
25
250
0

3
30
300
1

3
35
350
0


我用过这个:
df['D'] = df['C'].apply(lambda x: 1 if x in firsts else 0)
但输出是:


一种

C
D


1
10
100
0

1
15
150
0

2
20
200
0

2
25
250
0

3
30
300
0

3
35
350
0


如果有人解释为什么我的解决方案是错误的以及这个问题的实际解决方案是什么,我很感激?

最佳答案

您可以使用 isin方法:

df['D'] = df.C.isin(firsts).astype(int)

df
# A B C D
#0 1 10 100 1
#1 1 15 150 0
#2 2 20 200 1
#3 2 25 250 0
#4 3 30 300 1
#5 3 35 350 0

您的方法失败的原因是 python in运算符检查系列的索引而不是值,与字典的工作方式相同:
firsts
#A
#1 100
#2 200
#3 300
#Name: C, dtype: int64

1 in firsts
# True

100 in firsts
# False

2 in firsts
# True

200 in firsts
# False

修改您的方法如下有效:
firstSet = set(firsts)
df['C'].apply(lambda x: 1 if x in firstSet else 0)

#0 1
#1 0
#2 1
#3 0
#4 1
#5 0
#Name: C, dtype: int64

关于python - 数据框列值与列表的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44218378/

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