Объединить кадры данных, включая экстремальные значения - PullRequest
0 голосов
/ 29 мая 2018

У меня есть 2 фрейма данных, df1 и df2:

df1
Out[66]: 
    A   B
0   1  11
1   1   2
2   1  32
3   1  42
4   1  54
5   1  66
6   2  16
7   2  23
8   3  13
9   3  24
10  3  35
11  3  46
12  3  51
13  4  12
14  4  28
15  4  39
16  4  49

df2
Out[80]: 
    B
0  32
1  42
2  13
3  24
4  35
5  39
6  49

Я хочу объединить фреймы данных, но в то же время, включая первое и / или последнее значение набора в столбце A. ЭтоПример желаемого результата:

df3
Out[93]: 
    A   B
0   1   2
1   1  32
2   1  42
3   1  54
4   3  13
5   3  24
6   3  35
7   3  46
8   4  28
9   4  39
10  4  49

Я пытаюсь использовать merge, но это только часть фрагмента данных, которая совпадает.У кого-нибудь есть идея с этим справиться?спасибо!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вот один из способов сделать это, используя merge с индикатором, groupby и rolling:

df[df.merge(df2, on='B', how='left', indicator='Ind').eval('Found=Ind == "both"')
     .groupby('A')['Found']
     .apply(lambda x: x.rolling(3, center=True, min_periods=2).max()).astype(bool)]

Вывод:

    A   B
1   1   2
2   1  32
3   1  42
4   1  54
8   3  13
9   3  24
10  3  35
11  3  46
14  4  28
15  4  39
16  4  49
0 голосов
/ 29 мая 2018
 pd.concat([df1.groupby('A').min().reset_index(), pd.merge(df1,df2, on="B"), df1.groupby('A').max().reset_index()]).reset_index(drop=True).drop_duplicates().sort_values(['A','B'])
    A   B
0   1   2
4   1  32
5   1  42
1   2  16
2   3  13
7   3  24
8   3  35
3   4  12
9   4  39
10  4  49

Разбивка каждой части

#Get Minimum
df1.groupby('A').min().reset_index()

# Merge on B
pd.merge(df1,df2, on="B")

# Get Maximum
df1.groupby('A').max().reset_index()

# Reset the Index and drop duplicated rows since there may be similarities between the Merge and Min/Max. Sort values by 'A' then by 'B'
.reset_index(drop=True).drop_duplicates().sort_values(['A','B'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...