Как выполнить группировку по и перечислить результат в каждой строке в новом столбце, используя Python? - PullRequest
0 голосов
/ 16 июня 2020

Я все еще учусь Python, поэтому мне нужна помощь. У меня есть следующие данные:

Product |   No_unit_tested  | Yield

A   |1  |0.320

A   |4  |0.780

B   |5  |0.900

C   |3  |0.670

C   |7  |0.540

D   |7  |1.000

D   |9  |0.800

, и я хочу получить следующие результаты:

Product |No_unit_tested |Yield  |Mean

A   |1  |0.320  |0.550

A   |4  |0.780  |0.550

B   |5  |0.900  |0.900

C   |3  |0.670  |0.605

C   |7  |0.540  |0.605

D   |7  |1.000  |0.900

D   |9  |0.800  |0.900

с помощью df = df.groupby('Product')['Yield'].mean() Мне удалось получить среднее значение для каждого продукта, но я ' м не в состоянии дать желаемый результат. Как это сделать в Python, используя pandas?

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Здесь вы go:

import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO(
    """Product|No_unit_tested|Yield
A|1|0.320
A|4|0.780
B|5|0.900
C|3|0.670
C|7|0.540
D|7|1.000
D|9|0.800"""
), sep='|')
means = df.groupby('Product')['Yield'].mean()
means.name = 'Mean'
result = df.set_index('Product').join(means).reset_index()
print(result)

Вывод:

  Product  No_unit_tested  Yield   Mean
0       A               1   0.32  0.550
1       A               4   0.78  0.550
2       B               5   0.90  0.900
3       C               3   0.67  0.605
4       C               7   0.54  0.605
5       D               7   1.00  0.900
6       D               9   0.80  0.900
0 голосов
/ 16 июня 2020

Вот что вы можете сделать:

s1 = '''Product | No_unit_tested | Yield

A |1 |0.320

A |4 |0.780

B |5 |0.900

C |3 |0.670

C |7 |0.540

D |7 |1.000

D |9 |0.800'''

d = {}
s2 = [n.strip() for n in s1.replace('|','\n').split()]
for n in range(5,len(s2),3):
    if s2[n-2] in d.keys():
        d[s2[n-2]].append(float(s2[n]))
    else:
        d[s2[n-2]] = [float(s2[n])]

s3 = [s1.split('\n\n')[0]+' |Mean']
for k in d.keys():    
    for l in s1.split('\n'):
        if k in l:
            s3.append(l+f' |{"%.3f"%float(sum(d[k])/len(d[k]))}')

print('\n\n'.join(s3))

Вывод:

Product| No_unit_tested| Yield |Mean

A |1 |0.320 |0.550

A |4 |0.780 |0.550

B |5 |0.900 |0.900

C |3 |0.670 |0.605

C |7 |0.540 |0.605

D |7 |1.000 |0.900

D |9 |0.800 |0.900
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...