我有一个大的DataFrame沿着下面的那一行,我希望计算特定列的均值或模式。我希望通过一个功能(无论是打开还是关闭)以及ID列(1或2)进行分组。
$config['allowed_types'] = 'jpeg|jpg|png'
我可以分别执行两个任务来查找特定列的均值和模式,但我无法弄清楚如何将两个输出连接在一起,但后来我也想知道是否有办法计算均值或一次点击中所选列的模式?
在我目前的方法中,虽然我能够完成这两项任务,但我仍在努力将两个输出加在一起。
这是我的单独方法
MY_DF
Feature ID ITEM1 ITEM2 ITEM3
index
1 ON 1 2.3 544 32.2
2 OFF 1 2.55 544 23.4
3 ON 2 8.32 674 15.5
4 ON 1 1.56 544 43.4
5 OFF 2 3.55 674 32.4
我的平均方法输出如下:
#as mode is not an official function in Pandas, set out method here
from scipy.stats.mstats import mode
f = lambda x: mode(x, axis=None)[0]
means = MY_DF.groupby(['Feature','ID'])[ITEM1,ITEM3].mean()
moder = MY_DF.groupby(['Feature','ID'])[ITEM2].apply(f)
我的模式方法输出如下内容:
ITEM1 ITEM3
ON 1 1.93 37.8
2 8.32 15.5
OFF 1 2.55 23.4
2 3.55 32.4
如果可能,我正在寻找类似的最终输出?
ITEM2
ON 1 [544]
2 [674]
OFF 1 [544]
2 [674]
答案 0 :(得分:2)
你可以pass a dict to GroupBy.agg
。键指的是DataFrame的列,值指定聚合函数。例如,
import pandas as pd
import scipy.stats.mstats as mstats
def mode(x):
return mstats.mode(x, axis=None)[0]
df = pd.DataFrame({'Feature': ['ON', 'OFF', 'ON', 'ON', 'OFF'],
'ID': [1, 1, 2, 1, 2],
'ITEM1': [2.3, 2.55, 8.32, 1.56, 3.55],
'ITEM2': [544, 544, 674, 544, 674],
'ITEM3': [32.2, 23.4, 15.5, 43.4, 32.4],})
df.groupby(['Feature','ID']).agg({'ITEM1':'mean','ITEM3':'mean','ITEM2':mode})
print(df)
产量
Feature ID ITEM1 ITEM2 ITEM3
0 ON 1 2.30 544 32.2
1 OFF 1 2.55 544 23.4
2 ON 2 8.32 674 15.5
3 ON 1 1.56 544 43.4
4 OFF 2 3.55 674 32.4