在dataframe python中创建子列
我有一个包含多列的数据框在dataframe python中创建子列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含多列的数据框 df = pd.DataFrame({"cylinders":[2,2,1,1], "horsepower":[120,100,89,70], "weight":[5400,6200,7200,1200]}) cylinders horsepower weight 0 2 120 5400 1 2 100 6200 2 1
df = pd.DataFrame({"cylinders":[2,2,1,1],
"horsepower":[120,100,89,70],
"weight":[5400,6200,7200,1200]})
cylinders horsepower weight
0 2 120 5400
1 2 100 6200
2 1 80 7200
3 1 70 1200
我想创建一个新的数据框,在用圆柱体凿取数据框时,用中间值和平均值制作两个子列的权重。
例如:
对于我的示例表,我使用了随机值。我无法做到这一点。
我知道如何得到中间值,也就是问题中描述的中间值。
:
但是如何创建这个子列呢?下面的代码片段添加了两个请求的列。它按圆柱体对行进行分组,计算权重的平均值和中位数,并将原始数据帧和结果组合在一起:
result = df.join(df.groupby('cylinders')['weight']\
.agg(['mean', 'median']))\
.sort_values(['cylinders', 'mean']).ffill()
# cylinders horsepower weight mean median
#2 1 80 7200 5800.0 5800.0
#3 1 70 1200 5800.0 5800.0
#1 2 100 6200 4200.0 4200.0
#0 2 120 5400 4200.0 4200.0
熊猫中的选定列不能有“子列”。如果一列有“subcolumns”,则所有其他列也必须有“subcolumns”。它被称为多重索引。我可以通过多重索引得到这种结构吗,在多重索引中,我在顶部和中位数上有权重,在它下面有平均值?是的,你可以,但是你也必须有气缸和马力的二级索引。将这些列称为“平均重量”和“中间重量”可能更容易。
df.weight.median()
df.weight.mean()
df.groupby('cylinders') #groupby cylinders
result = df.join(df.groupby('cylinders')['weight']\
.agg(['mean', 'median']))\
.sort_values(['cylinders', 'mean']).ffill()
# cylinders horsepower weight mean median
#2 1 80 7200 5800.0 5800.0
#3 1 70 1200 5800.0 5800.0
#1 2 100 6200 4200.0 4200.0
#0 2 120 5400 4200.0 4200.0