我有一个DataFrame,其行一次提供一个功能的值.时间由“时间”列标识(大约有1000000个不同的时间).功能由功能列标识(有几十个功能).功能和时间的任意组合最多为一行.每次仅提供某些功能.唯一的例外是功能0,该功能始终可用.我想在该DataFrame中添加一列,以显示当时功能0的值.有合理的快速方法吗?
例如,假设我有
df = pd.DataFrame({
'time': [1,1,2,2,2,3,3],
'feature': [1,0,0,2,4,3,0],
'value':[1,2,3,4,5,6,7],
})
我尝试使用groupby和boolean索引,但是没有运气.
解决方法:
I’d like to add to that DataFrame a column that shows the value of the feature 0 at that time. Is there a reasonably fast way to do it?
我认为,groupby(这是一项非常昂贵的操作)对于此而言是一个过大的杀伤力.尝试使用仅0功能的值进行合并:
>>> pd.merge(
df,
df[df.feature == 0].drop('feature', axis=1).rename(columns={'value': 'value_0'}))
feature time value value_0
0 1 1 1 2
1 0 1 2 2
2 0 2 3 3
3 2 2 4 3
4 4 2 5 3
5 3 3 6 7
6 0 3 7 7
编辑
根据@jezrael的要求,这是一个计时测试:
import pandas as pd
m = 10000
df = pd.DataFrame({
'time': range(m / 2) + range(m / 2),
'feature': range(m / 2) + [0] * (m / 2),
'value': range(m),
})
在此输入上,@ jezrael的解决方案花费396毫秒,而我的花费4.03毫秒.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。