使用pandas分组并自动填充数据
Using pandas to groupby and automatically fill data
我有以下使用 pandas 的数据框:
具有 nan 的 header 列元素应该说最后一个词 founded。因此,列 header 应该是:
nan Ciclo 室内 Ciclo 室内 Ciclo 室内 Ciclo 室内 Body 泵 Body 泵 ....
在此之后,我想按运动分组(室内自行车等...)。
可以先用Series.fillna
with method='ffill'
(.ffill
), but it does not work with Index
, so need Index.to_series
:
cols = [np.nan, 'Ciclo Indoor', np.nan, np.nan, 'Body Pump', np.nan, np.nan]
df = pd.DataFrame([[1,0,1,2,1,0,1]], columns = cols)
print (df)
NaN Ciclo Indoor NaN NaN Body Pump NaN NaN
0 1 0 1 2 1 0 1
df.columns = df.columns.to_series().ffill()
print (df)
NaN Ciclo Indoor Ciclo Indoor Ciclo Indoor Body Pump Body Pump \
0 1 0 1 2 1 0
Body Pump
0 1
最后 groupby
按列名 axis=1
和 level=0
并汇总 sum
或 mean
...
df1 = df.groupby(axis=1, level=0).sum()
print (df1)
Body Pump Ciclo Indoor
0 2 3
我有以下使用 pandas 的数据框:
nan Ciclo 室内 Ciclo 室内 Ciclo 室内 Ciclo 室内 Body 泵 Body 泵 ....
在此之后,我想按运动分组(室内自行车等...)。
可以先用Series.fillna
with method='ffill'
(.ffill
), but it does not work with Index
, so need Index.to_series
:
cols = [np.nan, 'Ciclo Indoor', np.nan, np.nan, 'Body Pump', np.nan, np.nan]
df = pd.DataFrame([[1,0,1,2,1,0,1]], columns = cols)
print (df)
NaN Ciclo Indoor NaN NaN Body Pump NaN NaN
0 1 0 1 2 1 0 1
df.columns = df.columns.to_series().ffill()
print (df)
NaN Ciclo Indoor Ciclo Indoor Ciclo Indoor Body Pump Body Pump \
0 1 0 1 2 1 0
Body Pump
0 1
最后 groupby
按列名 axis=1
和 level=0
并汇总 sum
或 mean
...
df1 = df.groupby(axis=1, level=0).sum()
print (df1)
Body Pump Ciclo Indoor
0 2 3