在自定义函数上使用整个 groupby 对象
Use entire groupby object on custom function
我有一个看起来像这样的数据框:
df =
date col1 col2 col3
---------------------------------------
2022/03/01 1 5 10
2022/03/01 3 6 12
2022/03/01 5 7 14
2022/03/02 6 8 15
2022/03/02 2 9 17
2022/03/02 8 10 19
2022/03/03 2 11 21
2022/03/03 10 12 22
2022/03/03 9 13 23
然后我有一个看起来像这样的函数:
my_func(df):
<do something with the `df` given to the function>
return result
所以在我的例子中,结果只是一个 float
通过对使用的数据框做几件事计算得出的结果。
我想做的是 groupby
原始数据框中的日期,然后将这些组对象用作函数中的输入,并返回所有行的计算值,即生成的数据框看起来像:
df_group_object1 =
date col1 col2 col3 result
--------------------------------------------------
2022/03/01 1 5 10 15
2022/03/01 3 6 12 15
2022/03/01 5 7 14 15
df_group_object2 =
date col1 col2 col3 result
--------------------------------------------------
2022/03/02 6 8 15 25
2022/03/02 2 9 17 25
2022/03/02 8 10 19 25
df_group_object3 =
date col1 col2 col3 result
--------------------------------------------------
2022/03/03 2 11 21 56
2022/03/03 10 12 22 56
2022/03/03 9 13 23 56
其中 result
列只是我输入的随机值。实际值将来自 my_func
。
我的想法是做这样的事情:
df["result"] = df.groupby(["date"]).transform(my_func)
但我认为将提供给函数的 groupby
对象似乎根本不是整个数据框。
那么有办法做到这一点吗?
假设你想对分组的DataFrame进行操作然后收集结果,你可以只在groupby对象上使用for循环:
import pandas as pd
df = pd.DataFrame({'col1':[1,1,2,2,3], 'col2':[1,2,3,4,5]})
def my_func(df):
return df['col2'] + 1
# let's say you want to groupby col1 and operate on the rest of the columns
group_object = []
for group_name, df_chunk in df.groupby('col1'):
df_chunk['result'] = my_func(df_chunk)
group_object.append(df_chunk)
group_object[0]
:
col1 col2 result
0 1 1 2
1 1 2 3
我有一个看起来像这样的数据框:
df =
date col1 col2 col3
---------------------------------------
2022/03/01 1 5 10
2022/03/01 3 6 12
2022/03/01 5 7 14
2022/03/02 6 8 15
2022/03/02 2 9 17
2022/03/02 8 10 19
2022/03/03 2 11 21
2022/03/03 10 12 22
2022/03/03 9 13 23
然后我有一个看起来像这样的函数:
my_func(df):
<do something with the `df` given to the function>
return result
所以在我的例子中,结果只是一个 float
通过对使用的数据框做几件事计算得出的结果。
我想做的是 groupby
原始数据框中的日期,然后将这些组对象用作函数中的输入,并返回所有行的计算值,即生成的数据框看起来像:
df_group_object1 =
date col1 col2 col3 result
--------------------------------------------------
2022/03/01 1 5 10 15
2022/03/01 3 6 12 15
2022/03/01 5 7 14 15
df_group_object2 =
date col1 col2 col3 result
--------------------------------------------------
2022/03/02 6 8 15 25
2022/03/02 2 9 17 25
2022/03/02 8 10 19 25
df_group_object3 =
date col1 col2 col3 result
--------------------------------------------------
2022/03/03 2 11 21 56
2022/03/03 10 12 22 56
2022/03/03 9 13 23 56
其中 result
列只是我输入的随机值。实际值将来自 my_func
。
我的想法是做这样的事情:
df["result"] = df.groupby(["date"]).transform(my_func)
但我认为将提供给函数的 groupby
对象似乎根本不是整个数据框。
那么有办法做到这一点吗?
假设你想对分组的DataFrame进行操作然后收集结果,你可以只在groupby对象上使用for循环:
import pandas as pd
df = pd.DataFrame({'col1':[1,1,2,2,3], 'col2':[1,2,3,4,5]})
def my_func(df):
return df['col2'] + 1
# let's say you want to groupby col1 and operate on the rest of the columns
group_object = []
for group_name, df_chunk in df.groupby('col1'):
df_chunk['result'] = my_func(df_chunk)
group_object.append(df_chunk)
group_object[0]
:
col1 col2 result
0 1 1 2
1 1 2 3