根据多列的值计算统计数据
Calculate statistics based on values from multiple columns
我有一个如下所示的数据框
ID_1,value_1,value_2,ID_2
1,21,0,A1
1,31,5,A2
1,0,0,A3
1,21,0,A4
1,21,21,A5
2,202,0,B1
2,310,159,B2
2,0,0,B3
2,201,310,B4
2,210,214,B5
2,178,190,B6
tdf = pd.read_clipboard(sep=',')
我想计算每个 ID_1
的均值、中位数和众数
但是,我想排除 value_1
和 value_2
都为零的行
例如:我们将 ignore/filter 出行索引 2 和 7。
一次,我们忽略了零值的行,我们根据 value_1
和 [=] 的值计算 mean
、median
和 mode
15=] 每个 ID_1
。意思是,我们连接 value_1
和 value_2
两列中的值,然后计算统计数据
我正在尝试类似下面的方法,但它不正确
tdf = tdf[~(tdf['value_1']==0) & (tdf['value_2']==0)] #this is incorrect logic
t1_count = tdf.groupby('ID')['value_1'].size().reset_index()
t1_values = tdf.groupby('ID')['value_1'].agg(list)
我希望我的输出如下所示
ID_1 mean mode median
0 1 18.8 21 21.0
1 2 183.5 310 201.5
如果需要删除同时包含 0
的行,请使用:
tdf = tdf[~((tdf['value_1']==0) & (tdf['value_2']==0))]
或:
tdf = tdf[(tdf['value_1']!=0) | (tdf['value_2']!=0)]
或:
tdf = tdf[tdf[['value_1','value_1']].ne(0).all(axis=1)]
然后:
df = (tdf.melt(id_vars='ID_1',
value_vars=['value_1','value_2'])
.groupby('ID_1')['value'].agg(['mean','median',lambda x: x.mode().iat[0]])
.rename(columns={'<lambda_0>':'mode'})
.reset_index())
print (df)
ID_1 mean median mode
0 1 15.0 21.0 21
1 2 197.4 201.5 310
我有一个如下所示的数据框
ID_1,value_1,value_2,ID_2
1,21,0,A1
1,31,5,A2
1,0,0,A3
1,21,0,A4
1,21,21,A5
2,202,0,B1
2,310,159,B2
2,0,0,B3
2,201,310,B4
2,210,214,B5
2,178,190,B6
tdf = pd.read_clipboard(sep=',')
我想计算每个 ID_1
但是,我想排除 value_1
和 value_2
例如:我们将 ignore/filter 出行索引 2 和 7。
一次,我们忽略了零值的行,我们根据 value_1
和 [=] 的值计算 mean
、median
和 mode
15=] 每个 ID_1
。意思是,我们连接 value_1
和 value_2
两列中的值,然后计算统计数据
我正在尝试类似下面的方法,但它不正确
tdf = tdf[~(tdf['value_1']==0) & (tdf['value_2']==0)] #this is incorrect logic
t1_count = tdf.groupby('ID')['value_1'].size().reset_index()
t1_values = tdf.groupby('ID')['value_1'].agg(list)
我希望我的输出如下所示
ID_1 mean mode median
0 1 18.8 21 21.0
1 2 183.5 310 201.5
如果需要删除同时包含 0
的行,请使用:
tdf = tdf[~((tdf['value_1']==0) & (tdf['value_2']==0))]
或:
tdf = tdf[(tdf['value_1']!=0) | (tdf['value_2']!=0)]
或:
tdf = tdf[tdf[['value_1','value_1']].ne(0).all(axis=1)]
然后:
df = (tdf.melt(id_vars='ID_1',
value_vars=['value_1','value_2'])
.groupby('ID_1')['value'].agg(['mean','median',lambda x: x.mode().iat[0]])
.rename(columns={'<lambda_0>':'mode'})
.reset_index())
print (df)
ID_1 mean median mode
0 1 15.0 21.0 21
1 2 197.4 201.5 310