python pandas groupby aplicar argumentos lambda
<p>em um vídeo coursera sobre python pandas groupby (na introdução à ciência de dados em python))), o exemplo a seguir dado:</p><pre><code>df.groupby('category').apply(lambda df,a,b: sum(df[a] * df[b]), 'weight (oz.)', 'quantity') </code></pre><p>onde df é um dataframe e o lambda é aplicado para calcular a soma de duas colunas. se bem entendi, o objeto groupby (retornado por groupby) ao qual a função de aplicação é chamada é uma série de tuplas que consistem no índice que foi agrupado e na parte do dataframe que é esse agrupamento específico.</p><p>o que eu não entendo é a maneira como o lambda é usado:</p><p>existem três argumentos especificados (lambda df, a, b), mas apenas dois são explicitamente passados ​​('weight (oz.)' e 'quantity'). como o intérprete sabe que os argumentos 'a' e 'b' são os especificados como argumentos e df é usado 'como está'?</p><p>analisei os documentos, mas não consegui encontrar uma resposta definitiva para um exemplo tão específico. eu estou pensando que isso tem a ver com df estar no escopo, mas não consigo encontrar informações para apoiar e detalhar esse pensamento.</p>
<p>o próprio método apply passa cada "grupo" do objeto groupby como o primeiro argumento para a função. portanto, ele sabe associar 'peso' e "quantidade" a <code>a</code> e <code>b</code> com base na posição. (por exemplo, eles são o segundo e o terceiro argumentos, se você contar o primeiro argumento do "grupo".</p><pre><code>df = pd.dataframe(np.random.randint(0,11,(10,3)), columns = ['num1','num2','num3']) df['category'] = ['a','a','a','b','b','b','b','c','c','c'] df = df[['category','num1','num2','num3']] df category num1 num2 num3 0 a 2 5 2 1 a 5 5 2 2 a 7 3 4 3 b 10 9 1 4 b 4 7 6 5 b 0 5 2 6 b 7 7 5 7 c 2 2 1 8 c 4 3 2 9 c 1 4 6 gb = df.groupby('category') </code></pre><p>argumento implícito é cada "grupo" ou, neste caso, cada categoria</p><pre><code>gb.apply(lambda grp: grp.sum()) </code></pre><p>o "grp" é o primeiro argumento para o aviso da função lambda. não preciso especificar nada para ele, pois já é automaticamente considerado como cada grupo do objeto groupby</p><pre><code> category num1 num2 num3 category a aaa 14 13 8 b bbbb 21 28 14 c ccc 7 9 9 </code></pre><p>portanto, o apply passa por cada um deles e executa uma operação de soma</p><pre><code>print(gb.groups) {'a': int64index([0, 1, 2], dtype='int64'), 'b': int64index([3, 4, 5, 6], dtype='int64'), 'c': int64index([7, 8, 9], dtype='int64')} print('1st group:\n', df.loc[gb.groups['a']]) 1st group: category num1 num2 num3 0 a 2 5 2 1 a 5 5 2 2 a 7 3 4 print('sum of 1st group:\n', df.loc[gb.groups['a']].sum()) sum of 1st group: category aaa num1 14 num2 13 num3 8 dtype: object </code></pre><p>observe como isso é o mesmo que a primeira linha da nossa operação anterior</p><p>portanto, aplicar é <em> implicitamente </em> passando cada grupo ao argumento da função como o primeiro argumento.</p><p>do <a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.groupby.apply.html">docs</a> </p><blockquote> <p>groupby.apply (func, * args, ** kwargs)</p> <p>args, kwargs: tupla e ditado</p> <blockquote> <p>argumentos posicionais e de palavras-chave opcionais para passar para func</p> </blockquote> </blockquote><p>args adicionais passadas em "* args" são passadas <em> após </em> o argumento implícito do grupo.</p><p>então usando seu código</p><pre><code>gb.apply(lambda df,a,b: sum(df[a] * df[b]), 'num1', 'num2') category a 56 b 167 c 20 dtype: int64 </code></pre><p>aqui 'num1' e 'num2' estão sendo passados ​​como <em> argumentos adicionais </em> para cada chamada da função lambda</p><p>portanto, o apply passa por cada um deles e executa sua operação lambda</p><pre><code># copy and paste your lambda function fun = lambda df,a,b: sum(df[a] * df[b]) print(gb.groups) {'a': int64index([0, 1, 2], dtype='int64'), 'b': int64index([3, 4, 5, 6], dtype='int64'), 'c': int64index([7, 8, 9], dtype='int64')} print('1st group:\n', df.loc[gb.groups['a']]) 1st group: category num1 num2 num3 0 a 2 5 2 1 a 5 5 2 2 a 7 3 4 print('output of 1st group for function "fun":\n', fun(df.loc[gb.groups['a']], 'num1','num2')) output of 1st group for function "fun": 56 </code></pre>
<p>você já está no caminho certo, o que complica é as companhias se repetirem, força a gente a criar agrupamentos que acaba aumentando a complexidade um pouco.</p>
<p>olha se esse código funciona:</p>
<pre class="prettyprint"><code># imports
import pandas as pd
import numpy as np
from datetime import datetime, timedelta

# essas 3 linhas são para somar o faturamento baseado no nome da companhia
# a gente modifica o index para que o &#34;total value&#34; seja retornado corretamente para cada companhia já que estamos agrupando para somar o &#34;value&#34;
dados.set\_index(&#39;company&#39;, inplace&#61;true)
dados[&#39;total value&#39;] &#61; dados.groupby(&#39;company&#39;).sum()[&#39;value&#39;]
dados.reset\_index(inplace&#61;true)

# variável que representa o último ano móvel
last\_year &#61; datetime.now() - timedelta(days&#61;365)

# criação do ranking
# o legal é que mesmo com uma seleção menor que o dataframe ele ainda cria a series rank para as companhias corretas e coloca o resto como nan
dados[&#39;rank&#39;] &#61; dados[dados[&#39;date&#39;] &gt; last\_year][&#39;total value&#39;].rank(ascending&#61;false, method&#61;&#39;dense&#39;)

# aplica os nomes definidos para o top 4
dados[&#39;top 4 last year&#39;] &#61; dados[&#39;rank&#39;].apply(lambda x: x if (x &lt;&#61; 4 or np.isnan(x)) else &#39;outras&#39;)

# aplica os nomes definidos para o top 5
dados[&#39;top 5 last year&#39;] &#61; dados[&#39;rank&#39;].apply(lambda x: x if (x &lt;&#61; 4 or np.isnan(x)) else 5)
dados[&#39;top 5 last year&#39;] &#61; dados[&#39;top 5 last year&#39;].apply(lambda x: x if np.isnan(x) else str(int(x)) &#43; &#39;º&#39;)

dados</code></pre>
<p>espero ter ajudado, se tiver alguma dúvida é só perguntar!</p> <p>olá bianca, como vai?</p>
<p>quando o campo possui mais de uma palavra geralmente usamos o segundo exemplo de código. porém, não vejo problemas em utilizar um ou outro. se você preferir padronizar a forma de trabalhar os dataframes, pode escolher o segundo exemplo durante toda sua análise.</p>
<p>espero ter ajudado e bons estudos!</p>
<p><strong>: )</strong></p> usaremos o padrão de uma função afim : y = ax + b

x = vendas no mês

daí, temos que a= 20/100 e b = 5.000

então, 

y = 5.000 + 20/100 x = 5.000 + 0,20 x (letra d) <p>oi bruno!</p>
<p>é pela lógica matemática mesmo!</p>
<p>cada entrevistado(a) seria de a a e, os números de 1-5 nas colunas d a e não se fazem necessárias para a conta</p> robson, imagine que você fez uma aplicação onde precisa comparar se uma pessoa é maior de idade ou não.há milhares de linhas de código na aplicação e durante todo o teu programa foi usado o número má... <p>matheus, um update do pandas alterou a forma de tratar matrizes esparsas. 
aqui no cuso já tem algumas discussões sobre isso: 
 <a href="https://cursos.alura.com.br/course/introducao-a-nlp-com-analise-de-sentimento/task/65087">https://cursos.alura.com.br/course/introducao-a-nlp-com-analise-de-sentimento/task/65087</a></p>
<p><a href="https://cursos.alura.com.br/forum/topico-erro-em-sparsedataframe-107153">https://cursos.alura.com.br/forum/topico-erro-em-sparsedataframe-107153</a></p>
<p>é legal você dar uma olhada na documentação do pandas, assim você pode tirar essa dúvida e outras. 
<a href="https://pandas.pydata.org/docs/user\_guide/sparse.html" rel="nofollow">https://pandas.pydata.org/docs/user\_guide/sparse.html</a></p>
<p>espero ter ajudado ;)</p> reunix, agora ficou mais claro o problemaestava olhando na documentação do firebase e wherearraycontainsany faz uma citação de lista no valorhttps://firebase.google.com/docs/reference/android/com... declare a unit db na cláusula uses(qryrelatorio.fieldbyname(nome\_do\_campo) as tfloatfield).displayformat := 000000;insira esta linha antes após abrir a query ou a table e antes de dar o previe... o fator de correção ﻿\(\left( {fc} \right)\) de um alimento trata-se de uma constante que relaciona o peso bruto do alimento com seu peso líquido para ser empregado em preparos. então, tem-se que:﻿\[\boxed{fc = \dfrac{{{\text{peso do alimento bruto }}\left( {pb} \right)}}{{{\text{peso do alimento líquido }}\left( {pl} \right)}}}\]para exemplificar, suponha que um abacaxi é comprado no supermercado por um peso de ﻿\(500\text{ g}\). o mesmo será empregado no preparo de uma sobremesa e após ser descascado e picado, seu peso líquido é de ﻿\(400\text { g}\). com tais informações, calcula-se o fator de correção do abacaxi para este preparo:﻿\[\eqalign{ & fc = \dfrac{{500{\text{ g}}}}{{400{\text{ g}}}} \cr & = 1,25 }\] <p>oi joão, tudo bem ?</p>
<p>acho que tem algo que pode assumir, por exemplo, tudo que for um singleton, você pode deixar no escopo de aplicação, acho que dessa forma seu pensamento pode ficar mais claro.</p>