Estou processando arquivos que contêm dados em um formato inutilizável. Após processar um dos arquivos, fico com um dataframe e um valor singular.
O dataframe se parece com isto:
df = pd.DataFrame({
'A': ['foo', 'foo', 'foo', 'fizz', 'fizz', 'fizz', 'fizz'],
'B': ['bar', 'bar', 'bar', 'buzz', 'buzz', 'buzz', 'baz'],
'C': [10,10,10,10,10,10,10]
})
val = 20.0
O valor não deve fazer parte do meu dataframe, mas precisa ser incluído no meu cálculo TOTAL. É assim que eu o extraio do arquivo depois de lê-lo em um dataframe (ele retorna uma string, então estou convertendo para float):
if len(df.loc[df['ID'].eq("Settle"), 'C'].values) > 0:
temp = df.loc[df['ID'].eq("Settle"), 'C']
if temp.values[0].isnumeric():
num = float(temp.values[0])
else:
num = 0.0
else:
num = 0.0
agora preciso fazer groupby.agg()
com a seguinte condição:
- Se
A == 'foo'
eu precisar adicionar val à soma
Este é o código básico que eu usaria para obter as somas de cada valor em A
, mas não consigo descobrir como fatorar minha condição. Estou supondo que posso usar np.where
or lambda
mas não tenho certeza de como usar isso com .agg()
e obter minha saída.
out = df.groupby(['A'], sort=False, as_index=False).agg({"C":"sum"})
Saída esperada:
A C
foo 50
fizz 40
Você pode simplesmente acrescentar uma linha com o valor extra (por exemplo, com
concat
) antes de executar a agregação:Saída:
Se você quiser adicionar valores diferentes a vários grupos: