Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中的groupby之后添加新列_Python_Csv_Pandas - Fatal编程技术网

Python 在pandas中的groupby之后添加新列

Python 在pandas中的groupby之后添加新列,python,csv,pandas,Python,Csv,Pandas,我正在使用pandas处理具有以下结构的csv文件 date, student, score, outof 20040601,mark,80,100 20040601,jack,40,100 20040602,mark,60,100 20040602,jack,30,100 我想将上述数据按日期分组,然后计算每个日期的百分比,然后绘制它 我可以使用下面的代码来执行groupby import pandas as pd data = pd.read_csv("csv_file") grouped

我正在使用pandas处理具有以下结构的csv文件

date, student, score, outof
20040601,mark,80,100
20040601,jack,40,100
20040602,mark,60,100
20040602,jack,30,100
我想将上述数据按日期分组,然后计算每个日期的百分比,然后绘制它

我可以使用下面的代码来执行groupby

import pandas as pd
data = pd.read_csv("csv_file")
grouped_by_date = data.groupby('date')
import pandas as pd
data = pd.read_csv("csv_file")
date['percentage'] = data['score']/data['outof']
我还可以使用以下代码计算每行的百分比

import pandas as pd
data = pd.read_csv("csv_file")
grouped_by_date = data.groupby('date')
import pandas as pd
data = pd.read_csv("csv_file")
date['percentage'] = data['score']/data['outof']
但我无法在分组数据上执行此操作。如何在分组数据上执行此操作

编辑

下面是我想要的输出

date, percentage
20040601,60
20040602,45

以下是我将要做的:

>>> df.set_index(['date'], inplace=True)
>>> df['percentDate'] = df.groupby(level=0).apply(lambda x: np.mean(x['score']/x['outof']))
>>> df
Out[391]: 
         student  score  outof  percentDate
date                                         
20040601    mark     80    100           0.60
20040601    jack     40    100           0.60
20040602    mark     60    100           0.45
20040602    jack     30    100           0.45
首先,由于您希望将值作为列设置到dataframe中,因此最好根据分组依据设置索引:这样以后(对我来说)更容易设置值

其次,请注意,我使用了numpy的
mean()
函数:因为score/outof将返回一列观察结果(每个学生一行),所以您必须对其进行平均。

简单地说:

data['percentage'] = data.score/data.outof
data.groupby('date').mean()
收益率:

          score  outof  percentage
date                              
20040601     60    100        0.60
20040602     45    100        0.45

所需的输出是什么(它与您为完整数据帧计算的日期['percentage']有何不同?@joris刚刚编辑了问题以添加所需的输出您是否可以将其视为您为每个组的完整数据帧计算的百分比的平均值(因此
data.groupby('data')['percentage'].mean()
?如何从中获得预期的输出?(即,每个日期只有一行?仅运行右侧命令(
df.groupby(level=0)…。
)。