Объединить два кадра данных из условной строки - PullRequest
0 голосов
/ 30 мая 2018
df1
            A       B
0        0.00  514.51
1        0.75  514.51
2        1.10  514.42
3        3.52  514.41
4        5.59  514.43

df2
            A       B
0        2.00  520.00
1        3.00  521.00
2        4.00  524.00
3        5.00  529.00
4        6.00  531.00
5        7.00  532.00

Мне нужно создать новый df3 со следующими условиями:

  • С df1: все данные.
  • С df2: данные споследнее df1 A значение (я имею в виду, последнее df1 A значение равно 5,59; первое df2 A значение, которое я хочу включить в новое значение df3, будет равно 6,00)

Вывод df3 должен быть:

            A       B
0        0.00  514.51
1        0.75  514.51
2        1.10  514.42
3        3.52  514.41
4        5.59  514.43
5        6.00  531.00
6        7.00  532.00

Я пробовал с concat, merge и join.Нет успешно.

Ответы [ 3 ]

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

попробуйте это,

pd.concat([df1,df2[df2['A']>df1['A'].max()]])

Вывод:

      A       B
0  0.00  514.51
1  0.75  514.51
2  1.10  514.42
3  3.52  514.41
4  5.59  514.43
4  6.00  531.00
5  7.00  532.00
0 голосов
/ 30 мая 2018

Используйте append со вторым df2, созданным idxmax для первого True значения и фильтруйте по loc:

df = df1.append(df2.loc[(df2['A'] >= df1['A'].values[-1]).idxmax():])
print (df)
      A       B
0  0.00  514.51
1  0.75  514.51
2  1.10  514.42
3  3.52  514.41
4  5.59  514.43
4  6.00  531.00
5  7.00  532.00

Деталь :

print (df2.loc[(df2['A'] >= df1['A'].values[-1]).idxmax():])
     A      B
4  6.0  531.0
5  7.0  532.0
0 голосов
/ 30 мая 2018

Сначала вычислите логическую маску на df2:

mask = df2['A'] >= df1['A'].iloc[-1]  # or df1['A'].max(), as required

Затем используйте pd.concat:

df3 = pd.concat([df1, df2[mask]], ignore_index=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...