Python 根据预筛选的groupby对象更新数据帧列
给定数据帧Python 根据预筛选的groupby对象更新数据帧列,python,pandas,Python,Pandas,给定数据帧d,如下所示: 使用新值创建预筛选的组对象: g=d[prefilter].groupby(['some cols']).apply(somefunc) 现在我想将df更新为: index col1 1 a 2 c 3 b 4 d 我一直在破解更新、ix、过滤、where等。。。我猜有一个明显的解决方案,我在这里没有看到。 像这样的东西不起作用: d[d.index == db.index]['ale
d
,如下所示:
使用新值创建预筛选的组对象:
g=d[prefilter].groupby(['some cols']).apply(somefunc)
现在我想将df更新为:
index col1
1 a
2 c
3 b
4 d
我一直在破解更新、ix、过滤、where等。。。我猜有一个明显的解决方案,我在这里没有看到。
像这样的东西不起作用:
d[d.index == db.index]['alert_v'] = db['alert_v']
q90 = g.transform( somefunc )
d.ix[ d['alert_v'] >=q90, 'alert_v'] = 1
d.ix[ d['alert_v'] < q90, 'alert_v'] = 0
d['alert_v'] = np.where( d.index==db.index, db['alert_v'], d['alert_v'] )
d[d.index==db.index]['alert\u v']=db['alert\u v']
q90=g.transform(somefunc)
d、 ix[d['alert_v']>=q90,'alert_v']=1
d、 ix[d['alert_v']
谢谢你的帮助
谢谢
--编辑--
这两个数据帧的形式相同:
其中一个只是另一个的过滤版本,具有不同的值,我希望将其更新为原始版本
ValueError:无法从重复轴重新编制索引
DatetimeIndex:2186条记录,1984-12-12 13:33:00至1939-03-19 22:54:00
数据列(共9列):
源2186非空对象
受试者id 2186非空浮点64
警报\u t 2186非空对象
变量2186非空对象
时间索引2186非空datetime64[ns]
警报_v 2105非空浮点64
值2186非空浮点64
tavg 54非空timedelta64[ns]
iqt 61非空对象
数据类型:datetime64[ns](1)、float64(3)、object(4)、timedelta64[ns](1)无
DatetimeIndex:1982条目,1984-12-12 13:33:00至1939-03-19 22:54:00
数据列(共9列):
源非空对象
受试者id 1982非空浮点64
警报\u t 1982非空对象
变量非空对象
timeindex 1982非空datetime64[ns]
警报v 1982非空int64
值1982非空浮点64
tavg 0非空timedelta64[ns]
iqt 0非空对象
数据类型:datetime64[ns](1)、float64(2)、int64(1)、object(4)、timedelta64[ns](1)无
您需要df.update()函数
试着这样做:
import pandas as pd
df1 = pd.DataFrame({'Index':[1,2,3,4],'Col1':['A', 'B', 'C', 'D']}).set_index('Index')
df2 = pd.DataFrame({'Index':[2,4],'Col1':['E', 'F']}).set_index('Index')
print df1
Col1
Index
1 A
2 B
3 C
4 D
df1.update(df2)
print df1
Col1
Index
1 A
2 E
3 C
4 F
是的,我试过了,它给出了ValueError:无法从复制轴重新编制索引你知道这是怎么回事吗?更新前重置索引会产生相同的错误您能否确保两个数据帧上的索引相同?我在上面做的例子很有效,所以只需要将两个帧的格式设置为df1和df2的相同格式。这是一个名为“index”的列吗?也许您可以尝试设置_index('index'),然后使用.loc()进行索引
d[d.index == db.index]['alert_v'] = db['alert_v']
q90 = g.transform( somefunc )
d.ix[ d['alert_v'] >=q90, 'alert_v'] = 1
d.ix[ d['alert_v'] < q90, 'alert_v'] = 0
d['alert_v'] = np.where( d.index==db.index, db['alert_v'], d['alert_v'] )
import pandas as pd
df1 = pd.DataFrame({'Index':[1,2,3,4],'Col1':['A', 'B', 'C', 'D']}).set_index('Index')
df2 = pd.DataFrame({'Index':[2,4],'Col1':['E', 'F']}).set_index('Index')
print df1
Col1
Index
1 A
2 B
3 C
4 D
df1.update(df2)
print df1
Col1
Index
1 A
2 E
3 C
4 F