Groupby和apply函数用于Python中的子数据帧
如何按Groupby和apply函数用于Python中的子数据帧,python,pandas,numpy,Python,Pandas,Numpy,如何按项和日期分组,然后对于每个子数据帧,获取实际行,其中“data”值是子数据帧中的实际中间值 有时有多行,数据等于中间值,在这种情况下,我们只保留第一行 df: 预期产出: 1 22 2012-03-10 20 4 24 2012-03-11 50 您可以使用groupby().transform()然后使用布尔索引: medians = df.groupby(['item','date'])['data'].transform('median') # dro
项
和日期
分组,然后对于每个子数据帧,获取实际行,其中“data”值是子数据帧中的实际中间值
有时有多行,数据
等于中间值,在这种情况下,我们只保留第一行
df:
预期产出:
1 22 2012-03-10 20
4 24 2012-03-11 50
您可以使用groupby().transform()
然后使用布尔索引:
medians = df.groupby(['item','date'])['data'].transform('median')
# drop duplicates in the case
# there are multiple rows equal to median
df[df['data']==medians].drop_duplicates(['item','date','data'])
输出:
item date data
1 22 2012-03-10 20
4 24 2012-03-11 50
item date data
0 22 2012-03-10 20
1 24 2012-03-11 50
您可以使用groupby().transform()
然后使用布尔索引:
medians = df.groupby(['item','date'])['data'].transform('median')
# drop duplicates in the case
# there are multiple rows equal to median
df[df['data']==medians].drop_duplicates(['item','date','data'])
输出:
item date data
1 22 2012-03-10 20
4 24 2012-03-11 50
item date data
0 22 2012-03-10 20
1 24 2012-03-11 50
请.groupby()
,.agg(中位数)
请.groupby()
,.agg(中位数)
您可以使用熊猫作为示例 df['date']=pd.to_datetime(df['date']).dt.date df1=df.groupby(['data','date'])['date','data'].median()
df1您可以使用熊猫将以下内容用作示例 df['date']=pd.to_datetime(df['date']).dt.date df1=df.groupby(['data','date'])['date','data'].median() df1试试这个:
df.groupby(['item', 'date'], as_index=False).median()
输出:
item date data
1 22 2012-03-10 20
4 24 2012-03-11 50
item date data
0 22 2012-03-10 20
1 24 2012-03-11 50
试试这个:
df.groupby(['item', 'date'], as_index=False).median()
输出:
item date data
1 22 2012-03-10 20
4 24 2012-03-11 50
item date data
0 22 2012-03-10 20
1 24 2012-03-11 50
谢谢你的回答。使用它返回的代码
AttributeError:“DataFrame”对象没有属性“name”
,您知道可能会出现什么问题吗?您的示例数据和我的代码都不包含任何单词name
。您应该查看df.name
的实际代码,看看您在那里尝试了什么。谢谢您的回答。使用它返回的代码AttributeError:“DataFrame”对象没有属性“name”
,您知道可能会出现什么问题吗?您的示例数据和我的代码都不包含任何单词name
。您应该查看df.name
的实际代码,看看您试图在那里做什么。谢谢您的回答。实际上,数据框中还有其他列,我是否可以保留所有列?df.groupby(['item','date',as_index=False)。agg({'data':'median','other_col1':'first','other_col2':'first')
。您需要指定func如何选择要“sum”或“first”或“last”值的值。将列指定为“first”
时,行是否必须首先与其他列一致?如果没有,顺序是什么?不需要。因为您仅按“item”和“date”列对行进行分组。其余的列在选择值时会变得复杂,这就是为什么如果您不指定,它们不会显示的原因,这需要指定您是否要选择sum/median/min/max/first/last值。因此,如果我对附加列使用“first”表示“value”,其他因素保持不变,是否选择分组依据[“item”]后的第一行,“date”]还是选择group by[“item”,“date”]之后的第一行,其中data
列是组的中间值?谢谢您的回答。数据框中实际上还有其他列,我可以保留所有列吗?df.groupby(['item',date',as_index=False)。agg({'data':'median','other_col1':'first','other_col2':'first'})
。您需要指定func如何选择要“sum”或“first”或“last”值的值。将列指定为“first”时"
,行是否必须首先与其他列一致?如果不一致,顺序是什么?不需要。因为您仅按此列“项”和“日期”对行进行分组。其余列在选择值时会变得复杂,这就是为什么如果您不指定,它们不会显示的原因,因此需要指定是否要求和/medi要拾取的/min/max/first/last值。因此,如果我在附加列中使用“first”表示“value”,其他因素保持不变,是选择分组依据[“item”,“date”]后的第一行,还是选择分组依据[“item”,“date”]后的第一行,其中,数据
列是组的中间值?感谢您提供的解决方案。但是,返回的输出包括两列相同的数据
。此外,如果在数据帧中有其他列,例如时间戳,是否可以保留这些列中的原始值?如果相同,则会导致ts来自您的数据帧和可能的操作。查看您提供的数据示例和我的输出,我无法看到重复的列。感谢您提供的解决方案。但是返回的输出包括两列相同的数据
。此外,如果数据帧中有其他列,例如时间戳,是否可以是否保留这些列中的原始值?如果相同,则是数据帧和可能的操作导致的。查看您提供的数据示例和我的输出,我无法看到重复的列。