pandas - 比较熊猫系列中连续行的字符串值
问题描述
我正在尝试使用用户定义的函数计算熊猫系列的连续行中的常见字符串值,并将输出写入新列。我想出了各个步骤,但是当我把它们放在一起时,我得到了错误的结果。你能告诉我最好的方法吗?我是一个非常初学者的 Pythonista!
我的熊猫 df 是:
df = pd.DataFrame({"Code": ['d7e', '8e0d', 'ft1', '176', 'trk', 'tr71']})
我的字符串比较循环是:
x='d7e'
y='8e0d'
s=0
for i in y:
b=str(i)
if b not in x:
s+=0
else:
s+=1
print(s)
这些特定字符串的正确结果是 2
请注意,当我执行 def func(x,y): 时, s 计数器发生了一些事情,它不会产生正确的结果。我想每次循环运行时我都需要将其重置为 0。
然后,我使用 df.shift 指定 y 和 x 在一系列中的位置:
x = df["Code"]
y = df["Code"].shift(periods=-1, axis=0)
最后,我使用 df.apply() 方法运行该函数:
df["R1SB"] = df.apply(func, axis=0)
我的新列“R1SB”中没有值
我的正确输出是:
"Code" "R1SB"
0 d7e None
1 8e0d 2
2 ft1 0
3 176 1
4 trk 0
5 tr71 2
谢谢您的帮助!
解决方案
尝试:
df['R1SB'] = df.assign(temp=df.Code.shift(1)).apply(
lambda x: np.NAN
if pd.isna(x['temp'])
else sum(i in str(x['temp']) for i in str(x['Code'])),
1,
)
输出:
Code R1SB
0 d7e NaN
1 8e0d 2.0
2 ft1 0.0
3 176 1.0
4 trk 0.0
5 tr71 2.0
推荐阅读
- asp.net-core - Swashbuckle.AspNetCore 所需的查询字符串参数
- c++ - 从 VS2015 升级到 VS2017 后编译错误
- php - 按照实施 Laravel 本地邮件验证的步骤会带来一个问题
- facebook-javascript-sdk - 即使应用程序处于开发模式,Facebook 登录 api 仍然会给出 https required 的错误
- bash - 将列移动到 bash 中的 header 关键字开头
- java - 如何使用 org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 解密存储在 mongodb 中的密码?
- azure - 如何在逻辑应用中运行内联代码?
- openid - 诺克斯 OpenID 登录无限循环
- java - 如何将对象 ArrayList 中的 setText 设置为 TextView?
- javascript - 如何在 React 中加载 MathJax?