Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 lambda?_Python_Pandas_Lambda_Group By - Fatal编程技术网

如何定义获取第一个元素的python lambda?

如何定义获取第一个元素的python lambda?,python,pandas,lambda,group-by,Python,Pandas,Lambda,Group By,现在,我想使用自己的lambda对数据进行分组,但它们的行为与我预期的不同。下例中的lambda应返回组中列的第一个值: import pandas as pd df = pd.DataFrame({'A': [0, 0, 1, 1], 'B': [1, 3, 8, 10], 'C': ['alpha', 'bravo', 'charlie', 'delta']}) 代码抛出键错误:0,我不清楚,因为['alpha

现在,我想使用自己的lambda对数据进行分组,但它们的行为与我预期的不同。下例中的lambda应返回组中列的第一个值:

import pandas as pd
df = pd.DataFrame({'A': [0, 0, 1, 1], 
                   'B': [1, 3, 8, 10], 
                   'C': ['alpha', 'bravo', 'charlie', 'delta']})
代码抛出
键错误:0
,我不清楚,因为
['alpha','bravo'][0]
给出了
'alpha'

因此,总体而言,期望的输出:

df.groupby('A', as_index = False).agg({'B':'mean', 
                                       'C': lambda x: x[0]})

如果需要选择组中的第一个值,则使用或按位置选择:

    A   B          C
0   0   2    'alpha'
1   1   9  'charlie'
另一个解决方案是使用:


你能解释一下为什么lambda不起作用吗

问题是对于第二组,索引不是
0
,而是
2
,这会产生错误,因为
x[0]
尝试使用
0
按索引查看LCT,对于第二组,它不存在:

df1 = df.groupby('A', as_index = False).agg({'B':'mean', 'C': 'first'})
print (df1)
   A  B        C
0  0  2    alpha
1  1  9  charlie

小型解释
lambda
函数无法工作的原因

当我们使用
groupby
时,我们得到一个groupby对象:

df = pd.DataFrame({'A': [0, 0, 1, 1], 
                   'B': [1, 3, 8, 10], 
                   'C': ['alpha', 'bravo', 'charlie', 'delta']}, index=[0,1,0,1])
print (df)
   A   B        C
0  0   1    alpha <- index is 0
1  0   3    bravo
0  1   8  charlie <- index is 0
1  1  10    delta

df1 = df.groupby('A', as_index = False).agg({'B':'mean', 'C': lambda x: x[0]})
print (df1)
   A  B        C
0  0  2    alpha
1  1  9  charlie
这就是为什么我们需要将这些元素作为数据帧进行威胁。正如耶兹雷尔在回答中指出的那样,有几种方法可以访问
C
列中的第一个值:

for idx, d in g:
    print(d, '\n')

   A  B      C
0  0  1  alpha
1  0  3  bravo 

   A   B        C
2  1   8  charlie
3  1  10    delta 

你能解释一下为什么lambda不起作用吗?@Barmar-给你解释一下。
df = pd.DataFrame({'A': [0, 0, 1, 1], 
                   'B': [1, 3, 8, 10], 
                   'C': ['alpha', 'bravo', 'charlie', 'delta']}, index=[0,1,0,1])
print (df)
   A   B        C
0  0   1    alpha <- index is 0
1  0   3    bravo
0  1   8  charlie <- index is 0
1  1  10    delta

df1 = df.groupby('A', as_index = False).agg({'B':'mean', 'C': lambda x: x[0]})
print (df1)
   A  B        C
0  0  2    alpha
1  1  9  charlie
g = df.groupby('A')

print(g)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000023AA1BB41D0>
for idx, d in g:
    print(d, '\n')

   A  B      C
0  0  1  alpha
1  0  3  bravo 

   A   B        C
2  1   8  charlie
3  1  10    delta 
for idx, d in g:
    print(d['C'].iat[0])
    print(d['C'].iloc[0], '\n')

alpha
alpha 

charlie
charlie