【发布时间】:2017-08-11 03:16:40
【问题描述】:
我已搜索并找到有关此一般主题的其他问题,但找不到此特定问题的答案。
我有一个通过将几个数据帧附加在一起创建的数据帧,然后是 groupby 和 agg 过程。
我在下面构建了一个示例数据框,只需按照流程进行即可。
# constructing an example dataframe
import numpy as np
import pandas as pd
rand = np.random.RandomState(1)
df1 = pd.DataFrame({'B': ['subgroup1'] * 6,})
df2 = pd.DataFrame({'B': ['subgroup2'] * 6,})
df2['date'] = '1-1-2017'
df2['C'] = rand.rand(6)
df3 = pd.DataFrame({'B': ['subgroup1'] * 6,})
df3['date'] = '1-2-2017'
df3['C'] = rand.rand(6)
df4 = pd.DataFrame({'B': ['subgroup2'] * 6,})
df4['date'] = '1-2-2017'
df4['C'] = rand.rand(6)
df5 = df1.append(df2)
df6 = df5.append(df3)
df7 = df6.append(df4)
print df7
B date C
0 subgroup1 1-1-2017 0.417022
1 subgroup1 1-1-2017 0.720324
2 subgroup1 1-1-2017 0.000114
3 subgroup1 1-1-2017 0.302333
4 subgroup1 1-1-2017 0.146756
5 subgroup1 1-1-2017 0.092339
0 subgroup2 1-1-2017 0.186260
1 subgroup2 1-1-2017 0.345561
2 subgroup2 1-1-2017 0.396767
3 subgroup2 1-1-2017 0.538817
4 subgroup2 1-1-2017 0.419195
5 subgroup2 1-1-2017 0.685220
0 subgroup1 1-2-2017 0.204452
1 subgroup1 1-2-2017 0.878117
2 subgroup1 1-2-2017 0.027388
3 subgroup1 1-2-2017 0.670468
4 subgroup1 1-2-2017 0.417305
5 subgroup1 1-2-2017 0.558690
0 subgroup2 1-2-2017 0.140387
1 subgroup2 1-2-2017 0.198101
2 subgroup2 1-2-2017 0.800745
3 subgroup2 1-2-2017 0.968262
4 subgroup2 1-2-2017 0.313424
5 subgroup2 1-2-2017 0.692323
接下来,我按 2 列分组,并添加一个由“C”列的平均值组成的新列,以及一个计算平均值的新列。
group = df7.groupby(['date', 'B'])['C'].agg({'num' : len, 'C_mean' : np.mean})
print group
num C_mean
date B
1-1-2017 subgroup1 6.0 0.279815
subgroup2 6.0 0.428637
1-2-2017 subgroup1 6.0 0.459403
subgroup2 6.0 0.518874
DataFrame 'group' 是一个小例子,展示了我目前拥有的相同结构。实际上,每个日期组中都会有大量的行。
我想按列“C_mean”中的值对分组的DataFrame“组”进行排序——但在第一列“日期”的组内排序。排序应该是降序的。
因此,如果我们查看组 '1-1'2017' 中的列 'C_mean' 中的两个值,我们会看到 0.428637 和 0.279815 降序排序。同样在下一个日期组“1-2-2017”中,“C_mean”中的值将按降序排序——0.518874 和 0.459403
num C_mean
date B
1-1-2017 subgroup1 6.0 0.428637
subgroup2 6.0 0.279815
1-2-2017 subgroup1 6.0 0.518874
subgroup2 6.0 0.459403
我已经尝试了所有我能找到的方法来实现这一点,但在每种情况下,我都得到了整个列“C_mean”的排序——我需要在日期组中进行排序。
有人可以提出解决方案吗?
【问题讨论】: