python – 根据pandas DataFrame中的列值有条件地替换多个列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 根据pandas DataFrame中的列值有条件地替换多个列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1874字,纯文字阅读大概需要3分钟。
内容图文
![python – 根据pandas DataFrame中的列值有条件地替换多个列](/upload/InfoBanner/zyjiaocheng/805/2180d021bc7b495e90483c616d024ec0.jpg)
我想基于第一组列中的值(具体地,第一列中的一列为空白),同时将多列的值替换为其他列中的对应值.这是我正在尝试做的一个例子:
import pandas as pd
df = pd.DataFrame({'a1':['m', 'n', 'o', 'p'],
'a2':['q', 'r', 's', 't'],
'b1':['', '', 'a', '' ],
'b2':['', '', 'b', '']})
df
# a1 a2 b1 b2
# 0 m q
# 1 n r
# 2 o s a b
# 3 p t
我想将b1和b2中的”值替换为a1和a2中的相应值,其中b1为空:
# a1 a2 b1 b2
# 0 m q m q
# 1 n r n r
# 2 o s a b
# 3 p t p t
这是我的思考过程(我对熊猫来说相对较新,所以我可能会说这里有一个很重的R口音):
missing = (df.b1 == '')
# First thought:
df[missing, ['b1', 'b2']] = df[missing, ['a1', 'a2']]
# TypeError: 'Series' objects are mutable, thus they cannot be hashed
# Fair enough
df[tuple(missing), ('b1', 'b2')] = df[tuple(missing), ('a1', 'a2')]
# KeyError: ((True, True, False, True), ('a1', 'a2'))
# Obviously I'm going about this wrong. Maybe I need to use indexing?
df[['b1', 'b2']].ix[missing,:]
# b1 b2
# 0
# 1
# 3
# That looks right
df[['b1', 'b2']][missing, :] = df[['a1', 'a2']].ix[missing, :]
# TypeError: 'Series' objects are mutable, thus they cannot be hashed
# Deja vu
df[['b1', 'b2']].ix[tuple(missing), :] = df[['a1', 'a2']].ix[tuple(missing), :]
# ValueError: could not convert string to float:
# Uhh...
我可以逐列完成:
df['b1'].ix[missing] = df['a1'].ix[missing]
df['b2'].ix[missing] = df['a2'].ix[missing]
…但我怀疑这是一种更惯用的方法.思考?
更新:为了澄清,我特别想知道是否所有列都可以同时更新.例如,对Primer答案的假设修改(这不起作用并导致NaN,尽管我不确定为什么):
df.loc[missing, ['b1', 'b2']] = f.loc[missing, ['a1', 'a2']]
# a1 a2 b1 b2
# 0 m q NaN NaN
# 1 n r NaN NaN
# 2 o s a b
# 3 p t NaN NaN
解决方法:
怎么样
df[['b1', 'b2']] = df[['b1', 'b2']].where(df[['b1', 'b2']] != '', df[['a1', 'a2']].values)
这回来了
a1 a2 b1 b2
0 m q m q
1 n r n r
2 o s a b
3 p t p t
内容总结
以上是互联网集市为您收集整理的python – 根据pandas DataFrame中的列值有条件地替换多个列全部内容,希望文章能够帮你解决python – 根据pandas DataFrame中的列值有条件地替换多个列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。