Afer соединения двух кадров данных:Python Панда Dataframe: группа строки и уменьшающие группы с пользовательской функцией
left_dict = {
'id1': [1,2,3,4,5],
'val1': [10,20,30,40,50],
'lft': ['a','b','c','d','e']
}
right_dict = {
'id1': [1,7,3,4,8,1,3],
'val2': [100,700,300,400,800,110,330],
'rgt': [1.1,2.2,3.3,4.4,5.5,6.6,7.7]
}
left = pd.DataFrame(left_dict)
right = pd.DataFrame(right_dict)
r = pd.merge(left, right, how='outer', on='id1', indicator=False)
я получаю в результате кадров данных:
id1 lft val1 rgt val2
0 1.0 a 10.0 1.1 100.0
1 1.0 a 10.0 6.6 110.0
2 2.0 b 20.0 NaN NaN
3 3.0 c 30.0 3.3 300.0
4 3.0 c 30.0 7.7 330.0
5 4.0 d 40.0 4.4 400.0
6 5.0 e 50.0 NaN NaN
7 7.0 NaN NaN 2.2 700.0
8 8.0 NaN NaN 5.5 800.0
Теперь мне нужно складывать строки с тем же 'id1', 'lft' и 'rgt' в одну строку с 'id1', 'lft', 'rgt', без изменений и добавить новый столбец xxx в этот фрейм данных. Значения в этой колонке «ххх» вычисляются с помощью функции
def f(val1, val2):
if math.isnan(val2):
r = val1
else:
if math.isnan(val1):
r = val2
else:
r = val1 * 2 + val2 * 3
return r
Так в результате кадр данных должен быть таким:
id1 lft val1 rgt val2 xxx
0 1.0 a 10.0 1.1 100.0 320.0
1 2.0 b 20.0 NaN NaN 20.0
2 3.0 c 30.0 3.3 300.0 960.0
3 4.0 d 40.0 4.4 400.0 40.0
4 5.0 e 50.0 NaN NaN 50.0
5 7.0 NaN NaN 2.2 700.0 700.0
6 8.0 NaN NaN 5.5 800.0 800.0
Я пытался использовать:
In [85]: r.groupby(['id1','val1', 'lft', 'rgt']).groups
Это возвращает словарь со значениями, равными номерам строк в группах, что совсем не помогает. Любые идеи о том, как фактически складывать и сокращать строки?
В то время как «складывание» строк, как вы выбираете значения 'rgt' и' val1' в последнем фрейме данных, если 'id1' одинаково для нескольких строк? – Peaceful
Вы правы, я пропустил эту часть. Теперь я исправил свою проблему с помощью « Теперь мне нужно свернуть строки с одинаковыми« id1 »,« lft »и« rgt »в одну строку с« id1 »,« lft »,« rgt », без изменений и добавить новую столбец «xxx» в этот кадр данных. Значения в этом столбце «xxx» вычисляются с помощью функции « – zork
Что вы подразумеваете под словом« fold rows »? – josh