Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 Dataframe groupby:一次应用多个lambda函数_Python_Pandas - Fatal编程技术网

Python Pandas Dataframe groupby:一次应用多个lambda函数

Python Pandas Dataframe groupby:一次应用多个lambda函数,python,pandas,Python,Pandas,我按“名称”对以下数据帧进行分组,然后在“值”上应用几个lambda函数以生成其他列。 是否可以立即应用这些lambda函数以提高效率 import pandas as pd df = pd.DataFrame({'name': ['A','A', 'B','B','B','B', 'C','C','C'], 'value': [1, 3, 1, 2, 3, 1, 2, 3, 3], }) df['Diff'] = df.groupby('name')

我按“名称”对以下数据帧进行分组,然后在“值”上应用几个lambda函数以生成其他列。 是否可以立即应用这些lambda函数以提高效率

import pandas as pd

df = pd.DataFrame({'name': ['A','A', 'B','B','B','B', 'C','C','C'], 
                   'value': [1, 3, 1, 2, 3, 1, 2, 3, 3], })

df['Diff'] = df.groupby('name')['value'].transform(lambda x: x - x.iloc[0])
df['Count'] = df.groupby('name')['value'].transform(lambda x: x.count())
df['Index'] = df.groupby('name')['value'].transform(lambda x: x.index - x.index[0] + 1)

print(df)
输出:

  name  value  Diff  Count  Index
0    A      1     0      2      1
1    A      3     2      2      2
2    B      1     0      4      1
3    B      2     1      4      2
4    B      3     2      4      3
5    B      1     0      4      4
6    C      2     0      3      1
7    C      3     1      3      2
8    C      3     1      3      3
以下是一个功能的可能用途,但不确定是否有更好的性能:

def f(x):
    a = x - x.iloc[0]
    b = x.count()
    c = x.index - x.index[0] + 1
    return pd.DataFrame({'Diff':a, 'Count':b, 'Index':c})

df = df.join(df.groupby('name')['value'].apply(f))
print(df)

  name  value  Diff  Count  Index
0    A      1     0      2      1
1    A      3     2      2      2
2    B      1     0      4      1
3    B      2     1      4      2
4    B      3     2      4      3
5    B      1     0      4      4
6    C      2     0      3      1
7    C      3     1      3      2
8    C      3     1      3      3