python – 复制一些行并更改pandas中的某些值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 复制一些行并更改pandas中的某些值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1845字,纯文字阅读大概需要3分钟。
内容图文
![python – 复制一些行并更改pandas中的某些值](/upload/InfoBanner/zyjiaocheng/827/19c5a733bc394c5ebf8fa6f4a5858841.jpg)
我有一个像这样的pandas DataFrame:
From To Val
GE VD 1000
GE VS 1600
VS VD 1500
VS GE 600
VD GE 1200
VD VS 1300
我想将“from”或“to”列中没有“GE”的每一行替换为两行,一行在“from”列中有“GE”,另一行在“to”中有“GE”. “专栏.
在上面的例子中,我将用以下两行替换第三行:
GE VD 1500
VS GE 1500
我尝试使用“apply”但我无法弄清楚如何返回正确的数据框.例如
def myfun(row):
if "GE" not in (row["from"], row["to"]):
row1=pd.DataFrame(row).T
row2=row1.copy()
row1["from"]="GE"
row2["to"]="GE"
return pd.concat([row1, row2])
else:
return pd.DataFrame(row).T
给出一个奇怪的结果:
>> df.apply(myfun, axis=1)
Val from to
0 Val from to
1 Val from to
2 Val from to
3 Val from to
4 Val from to
5 Val from to
虽然我的功能看似正确:
>> myfun(df.loc[5])
Val from to
5 13 GE VD
5 13 VS GE
通过在两个子数据帧中过滤我的数据帧,我可以想到一种方法,一个行需要重复,另一个需要重复.然后复制第一个数据帧,进行更改并将所有三个DF整理在一起.但它很难看.有谁能建议更优雅的方式?
换句话说,应用函数可以返回一个DataFrame,就像在R中我们会用ddply做的那样吗?
谢谢
解决方法:
这使用两次通过.如果添加了一个else条件来连接将保持不变的行,则可以缩短它.但是,我觉得这更具可读性,因为我们使用itertuples来遍历行,所以这里的成本是线性的,我们只是根据需要形成每个元组(不是所有行的元组的大列表).
类似地,您可以在if语句中弹出一行,并将其位置中的两个新行连接回原始数据对象df,这样就不会产生创建keeper_rows的内存成本.除非DataFrame是巨大的,否则为这样的任务进行这些优化通常是不值得的.
keeper_rows = df.ix[[i for i,x in enumerate(df.itertuples()) if 'GE' in x[0:2]]]
for row_as_tuple in df.itertuples():
from_other, to_other, val = row_as_tuple
if "GE" not in (from_other, to_other):
new_rows = {"From":["GE", from_other],
"To" :[to_other, "GE"],
"Val" :[val, val]}
keeper_rows = pandas.concat([keeper_rows, pandas.DataFrame(new_rows)],
ignore_index=True)
内容总结
以上是互联网集市为您收集整理的python – 复制一些行并更改pandas中的某些值全部内容,希望文章能够帮你解决python – 复制一些行并更改pandas中的某些值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。