Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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
Groupby和apply函数用于Python中的子数据帧_Python_Pandas_Numpy - Fatal编程技术网

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来自您的数据帧和可能的操作。查看您提供的数据示例和我的输出,我无法看到重复的列。感谢您提供的解决方案。但是返回的输出包括两列相同的
数据
。此外,如果数据帧中有其他列,例如时间戳,是否可以是否保留这些列中的原始值?如果相同,则是数据帧和可能的操作导致的。查看您提供的数据示例和我的输出,我无法看到重复的列。