pandas根据预过滤的groupby对象更新数据帧列

时间:2014-07-14 18:14:44

标签: python pandas

给出数据框d,例如:

 index  col1
  1      a 
  2      a
  3      b
  4      b

使用新值创建预过滤的组对象: g = d[prefilter].groupby(['some cols']).apply( somefunc )

  index  col1
  2      c
  4      d

现在我想将df更新为:

   index   col1
    1      a
    2      c
    3      b
    4      d

我一直在破解更新,ix,过滤,等等......我猜我有一个明显的解决方案,我没有在这里看到。 像这样的东西不起作用:

 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'] )

感谢任何帮助

三江源

- edit-- 两个数据帧的形式相同: 一个只是另一个的过滤版本,具有不同的值,我想要更新为原始版本。

ValueError: cannot reindex from a duplicate axis

<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 2186 entries, 1984-12-12 13:33:00 to 1939-03-19 22:54:00 Data columns (total 9 columns): source 2186 non-null object subject_id 2186 non-null float64 alert_t 2186 non-null object variable 2186 non-null object timeindex 2186 non-null datetime64[ns] alert_v 2105 non-null float64 value 2186 non-null float64 tavg 54 non-null timedelta64[ns] iqt 61 non-null object dtypes: datetime64[ns](1), float64(3), object(4), timedelta64[ns](1)None<class 'pandas.core.frame.DataFrame'>

DatetimeIndex: 1982 entries, 1984-12-12 13:33:00 to 1939-03-19 22:54:00 Data columns (total 9 columns): source 1982 non-null object subject_id 1982 non-null float64 alert_t 1982 non-null object variable 1982 non-null object timeindex 1982 non-null datetime64[ns] alert_v 1982 non-null int64 value 1982 non-null float64 tavg 0 non-null timedelta64[ns] iqt 0 non-null object dtypes: datetime64[ns](1), float64(2), int64(1), object(4), timedelta64[ns](1)None

1 个答案:

答案 0 :(得分:0)

你想要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