- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
一些练习要求在应用聚合函数时向 df 列“添加辅助名称”。
给定以下 DF:
stype = ['s1','s1','s1','s1',
's2','s2','s2','s2']
dtype = ['d1','d1','d2','d2',
'd1','d1','d2','d2']
qty = [2, 1.4, 7, 3,
4, 1, 2.0, 3]
df = pd.DataFrame({'s_type':stype,
'd_type':dtype,
'qty':qty})
当按前 2 列分组并应用这样的聚合函数时
new_df=df.groupby(['s_type','d_type'],sort = False).agg({'qty':'median'})
然后打印(new_df)
我得到这个输出,注意 qty
向上移动了一行(我假设这是正常行为)因为是应用了 agg 函数的一列
qty
s_type d_type
s1 d1 1.7
d2 5.0
s2 d1 2.5
d2 2.5
问题是什么
是否可以在 qty
label/name 下设置辅助列名称?,以获得如下输出:
qty
s_type d_type Median
s1 d1 1.7
d2 5.0
s2 d1 2.5
d2 2.5
还有为什么 qty
向上移动 1 行? (我正在使用 Spyder,我也在 Anaconda/python 控制台中看到了这一点,不确定它是否像一个功能或 pandas 的正常行为)。
上次更新:如果您需要使用 sort_values,则必须为您添加二级索引/名称的列使用元组,这与应用聚合函数时的方式几乎相同(查看答案)
new_df=new_df.sort_values([('qty','MEDIAN')])
因此,您得到的 DF 按应用聚合函数的列和我们添加索引的列排序
qty
MEDIAN
s_type d_type
s1 d1 1.7
s2 d1 2.5
d2 2.5
s1 d2 5.0
python v3.6
Pandas v0.23
谢谢。
最佳答案
super 简单。在 agg
中将“median”作为列表传递:
result = df.groupby(['s_type','d_type'], sort=False).agg({'qty': ['median']})
result
qty
median
s_type d_type
s1 d1 1.7
d2 5.0
s2 d1 2.5
d2 2.5
至于“为什么 qty 向上移动 1 行”,这意味着前两列实际上是输出中的索引。查询 result.index
会很明显:
result.index
MultiIndex(levels=[['s1', 's2'], ['d1', 'd2']],
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=['s_type', 'd_type'])
您可以在调用 groupby 时指定 as_index=False
,
df.groupby(['s_type','d_type'], sort=False, as_index=False).agg({'qty': ['median']})
s_type d_type qty
median
0 s1 d1 1.7
1 s1 d2 5.0
2 s2 d1 2.5
3 s2 d2 2.5
所以石斑鱼在输出中保留列。
您可以通过将元组列表传递给 agg
来更改输出中的名称:
df.groupby(['s_type','d_type'], sort=False).agg(
{'qty': [('MEDIAN', 'median')]}
)
qty
MEDIAN
s_type d_type
s1 d1 1.7
d2 5.0
s2 d1 2.5
d2 2.5
关于python - 使用 pandas GroupBy 聚合时设置 MultiIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546585/
我有一个包含 4 个级别的 MultiIndex 的 pandas 数据框。我正在尝试为每个 1 级索引选择具有不同 4 级索引的行。 例子: In [68]: df = pd.DataFrame({
我有一个数据框,其中包含 Year 和 Month 的多个索引,如下所示 | |Value Year |Month| | 1 | 3 1992 | 2 | 5
我有一个带有 3 级 MultiIndex 的 pandas 数据框。我正在尝试根据对应于两个级别的值列表提取此数据帧的行。 我有这样的事情: ix = pd.MultiIndex.from_prod
我想将具有多索引的数据帧中的所有列除以另一个具有多索引的数据帧,更小一级。前两个水平的蛾指数是相同的。并且应该播放第三级。 df_0 = pd.DataFrame( { "col0": [ 1
我想知道是否有人可以帮助我解决这个问题。 如果我有一个简单的数据框: one two three four 0 A 1 a 1 1 A 2 b
我希望创建一个新的 DataFrame,与基于芯片的设备 A 和 B 的结果相对应。 以下是我创建 DataFrame 的代码: import numpy as np import pandas as
我希望创建一个新的 DataFrame,与基于芯片的设备 A 和 B 的结果相对应。 以下是我创建 DataFrame 的代码: import numpy as np import pandas as
请让我知道如何将两个 DataFrame 与排序的 MultiIndexes 连接起来,以便结果具有排序的 MultiIndex。 由于两者都是排序的,算法必须根据两个 DataFrame 中的总行数
基本场景 对于推荐服务,我正在针对一组用户-项目交互训练矩阵分解模型 (LightFM)。为了使矩阵分解模型产生最佳结果,我需要将我的用户 ID 和商品 ID 映射到从 0 开始的连续整数 ID 范围
好的,所以我有一个数据框,其中包含时间序列数据,每列都有一个多行索引。这是数据的样例,它是 csv 格式的。加载数据在这里不是问题。 我想要做的是能够创建一个箱线图,其中包含根据多索引特定行中的不同类
我有这个数据框: df = pd.DataFrame({'NUMBER_1': {('2019-07', 'A'): 4, ('2019-07', 'D'): 2, ('2019-08', 'A'):
我有点难以对用于我的一个数据集的列的 pandas MultiIndex 进行排序: MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'J
我有点难以对用于我的一个数据集的列的 pandas MultiIndex 进行排序: MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'J
我有一个列表列表,我想将其制成多索引 Pandas 数据框,然后可以合并到原始 Pandas 数据框。列表的每一行都包含一个观察值,列表中的值由与该观察值匹配的相应行组成。 这是我所拥有的一个简单版本
我有以下 DataFrame(从我无法更改的 CSV 文件中读取): df = pd.DataFrame([['low', 0.5, 123, 0.8, 123],
我正在创建一个 MultiIndex.from_product(),但它必须是来自两个单独的 MultiIndexes 的唯一值的乘积。我下面的解决方案有效,但我想知道是否有更优雅的解决方案。 fro
我有一个很大的pd.DataFrame,a,看起来像: bid TIT IM Equity HELN SE Equity FHZN SE Equity GLEN LN Equity f
我创建了一个带有多索引的数据框,其中一个索引是一个元组。我无法使用 .loc 进行索引。 这是数据框: a = [['a','a','a','b','b','b','c','c'],[('one',2
我有以下数据框 A B C D E F Algo T X
我在使用 MultiIndex 和 stack() 时遇到问题。以下示例基于 solution from Calvin Cheung在 StackOvervlow 上。 === multi.csv =
我是一名优秀的程序员,十分优秀!