首页 / PYTHON / python-分配给熊猫选择
python-分配给熊猫选择
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-分配给熊猫选择,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1347字,纯文字阅读大概需要2分钟。
内容图文
我有一个pandas数据框,我想创建一个新列,该列对于不同的行组的计算方式不同.这是一个简单的示例:
import pandas as pd
data = {'foo': list('aaade'), 'bar': range(5)}
df = pd.DataFrame(data)
数据框如下所示:
bar foo
0 0 a
1 1 a
2 2 a
3 3 d
4 4 e
现在,我要添加一个新列,并尝试为选定的行分配一些值:
df['xyz'] = 0
df.loc[(df['foo'] == 'a'), 'xyz'] = df.loc[(df['foo'] == 'a')].apply(lambda x: x['bar'] * 2, axis=1)
数据框未更改.我希望数据框看起来像这样:
bar foo xyz
0 0 a 0
1 1 a 2
2 2 a 4
3 3 d 0
4 4 e 0
在我的实际问题中,也为其他行计算了“ xyz”列,但使用了不同的函数.实际上,我还在计算中使用了不同的列.所以我的问题是:
>为什么以上示例中的分配不起作用?
>是否需要两次执行df.loc [(df [‘foo’] ==’a’)(就像我现在所做的那样)?
解决方法:
您正在更改df的副本(DataFrame的布尔掩码是副本,请参见docs).
实现所需结果的另一种方法如下:
In [11]: df.apply(lambda row: (row['bar']*2 if row['foo'] == 'a' else row['xyz']), axis=1)
Out[11]:
0 0
1 2
2 4
3 0
4 0
dtype: int64
In [12]: df['xyz'] = df.apply(lambda row: (row['bar']*2 if row['foo'] == 'a' else row['xyz']), axis=1)
In [13]: df
Out[13]:
bar foo xyz
0 0 a 0
1 1 a 2
2 2 a 4
3 3 d 0
4 4 e 0
也许更巧妙的方法是:
In [21]: 2 * (df1.bar) * (df1.foo == 'a')
Out[21]:
0 0
1 2
2 4
3 0
4 0
dtype: int64
内容总结
以上是互联网集市为您收集整理的python-分配给熊猫选择全部内容,希望文章能够帮你解决python-分配给熊猫选择所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。