Pandas 重新采样并将大小添加为一列
Pandas resample and add size as a column
给定一个数据框:
Index A B
2016-01-01 5 10
2016-01-01 1 2
2016-01-02 1 1
是否可以使用 sum 对 DataFrame 重新采样并在 DataFrame 的末尾添加一列,其中包括 bins 中的观察计数,使得结果为:
Index A B Count
2016-01-01 6 12 2
2016-01-02 1 1 1
您可以使用 Resampler.agg
or DataFrameGroupBy.agg
:
df1 = df.resample('D').agg({'A':'sum', 'B':['sum', 'size']})
print (df1)
B A
sum size sum
Index
2016-01-01 12 2 6
2016-01-02 1 1 1
df2 = df.groupby(level=0).agg({'A':'sum', 'B':['sum', 'size']})
print (df2)
B A
sum size sum
Index
2016-01-01 12 2 6
2016-01-02 1 1 1
如果需要删除列中的 MultiIndex
:
df1 = df.resample('D').agg({'A':'sum', 'B':['sum', 'size']})
df1.columns = ['B','Count','A']
df1 = df1[['A','B','Count']]
print (df1)
A B Count
Index
2016-01-01 6 12 2
2016-01-02 1 1 1
df2 = df.groupby(level=0).agg({'A':'sum', 'B':['sum', 'size']})
df2.columns = ['B','Count','A']
df2 = df2[['A','B','Count']]
print (df2)
A B Count
Index
2016-01-01 6 12 2
2016-01-02 1 1 1
您还可以使用额外的 count
列为您的数据播种,如下所示:
frame['count'] = 1 # A column of ones we can count
frame.resample(...).agg({
'count': np.sum,
'A': np.mean,
...
})
或者,如果您想说,对除 count
列以外的所有列求平均值:
frame['count'] = 1
frame.resample(...).agg({
# Default aggregation
**{key: np.mean for key in frame.keys()},
# Override `count`
'count': np.sum,
# other columns you want to override
})
给定一个数据框:
Index A B
2016-01-01 5 10
2016-01-01 1 2
2016-01-02 1 1
是否可以使用 sum 对 DataFrame 重新采样并在 DataFrame 的末尾添加一列,其中包括 bins 中的观察计数,使得结果为:
Index A B Count
2016-01-01 6 12 2
2016-01-02 1 1 1
您可以使用 Resampler.agg
or DataFrameGroupBy.agg
:
df1 = df.resample('D').agg({'A':'sum', 'B':['sum', 'size']})
print (df1)
B A
sum size sum
Index
2016-01-01 12 2 6
2016-01-02 1 1 1
df2 = df.groupby(level=0).agg({'A':'sum', 'B':['sum', 'size']})
print (df2)
B A
sum size sum
Index
2016-01-01 12 2 6
2016-01-02 1 1 1
如果需要删除列中的 MultiIndex
:
df1 = df.resample('D').agg({'A':'sum', 'B':['sum', 'size']})
df1.columns = ['B','Count','A']
df1 = df1[['A','B','Count']]
print (df1)
A B Count
Index
2016-01-01 6 12 2
2016-01-02 1 1 1
df2 = df.groupby(level=0).agg({'A':'sum', 'B':['sum', 'size']})
df2.columns = ['B','Count','A']
df2 = df2[['A','B','Count']]
print (df2)
A B Count
Index
2016-01-01 6 12 2
2016-01-02 1 1 1
您还可以使用额外的 count
列为您的数据播种,如下所示:
frame['count'] = 1 # A column of ones we can count
frame.resample(...).agg({
'count': np.sum,
'A': np.mean,
...
})
或者,如果您想说,对除 count
列以外的所有列求平均值:
frame['count'] = 1
frame.resample(...).agg({
# Default aggregation
**{key: np.mean for key in frame.keys()},
# Override `count`
'count': np.sum,
# other columns you want to override
})