gpt4 book ai didi

python - 如何在多个条件下填充数据框中新列的值

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:49 25 4
gpt4 key购买 nike

如果 Number 包含一些值并且 Code 包含 0 那么我正在尝试用值填充 FinalCode 中的值,即 0 应该替换为 Number 列的值,我可以这样做:

df['Final'] = np.where(df['Code'] == 0, df['Number'], df['Code'])

但对于行号5、6 和 7 我遇到了一个问题,该值应该在 Final 列中,其中填充的 00 值最少。 Pandas 如何实现这一目标?双零 (00) 只能连续出现。

最佳答案

您可以将值与 Series.str.count 进行比较并使用 | 链接 3 个条件用于 bitwise OR& 用于 bitwise AND with numpy.where :

print (df)
No Number Code Final
0 1 78797071 0 78797071
1 2 0 89797071 89797071
2 3 0 57797074 57797074
3 4 39797571 0 39797571
4 5 62170000 62175268 62175268
5 6 52130000 52000000 52130000
6 7 52146700 52140000 52146700

a = df['Number'].astype(str).str.count('0')
b = df['Code'].astype(str).str.count('0')

#test if value is not 0
m1 = df['Code'] != 0
#test if value is 0
m2 = df['Number'] == 0
#test if number of 0 is higher
m3 = a > b

df['Final'] = np.where((m1 & m2) | m3, df['Code'], df['Number'])
print (df)

No Number Code Final
0 1 78797071 0 78797071
1 2 0 89797071 89797071
2 3 0 57797074 57797074
3 4 39797571 0 39797571
4 5 62170000 62175268 62175268
5 6 52130000 52000000 52130000
6 7 52146700 52140000 52146700

详细信息:

print (df.assign(m1 = m1,
m2 = m2,
m3 = m3,
m1ANDm2 = m1 & m2,
mask= (m1 & m2) | m3))

No Number Code Final m1 m2 m3 m1ANDm2 mask
0 1 78797071 0 78797071 False False False False False
1 2 0 89797071 89797071 True True False True True
2 3 0 57797074 57797074 True True False True True
3 4 39797571 0 39797571 False False False False False
4 5 62170000 62175268 62175268 True False True False True
5 6 52130000 52000000 52130000 True False False False False
6 7 52146700 52140000 52146700 True False False False False

关于python - 如何在多个条件下填充数据框中新列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268123/

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