на основе значения одного столбца добавьте значение соответствующего столбца в новый столбец - PullRequest
0 голосов
/ 15 марта 2019

У меня есть 2 двух кадра данных df1 и df2, в df2 у меня есть 4 столбца.я хочу, если df2 column1 значение равно 0, код должен добавить соответствующие 3 значения столбца в df1 с именем столбца col2_0, col3_0 и col4_0 (Примечание: этот процесс также нужно сделать для значений -1, -2, -3, -4,-5), если еще можно решить эту проблему, но я ищу панд простой и быстрый способ решения этой проблемы

Вот df2

enter image description here

1 Ответ

1 голос
/ 15 марта 2019

Я буду использовать изначально пустой df1 с некоторыми дополнительными строками для этого примера:

df2 = pd.DataFrame({'#timestamp':[-5,-4,-3,-2,-1,0],
                    'grid_U1':   [413.714,413.797,413.926,414.037,414.066,414.064],
                    'grid_U2':   [415.796,415.909,416.117,416.093,416.163,416.183],
                    'grid_U3':   [416.757,416.853,417.09,417.158,417.175,417.085]})

df1 = pd.DataFrame(index=range(0,10), columns=['col2_0','col3_0','col4_0'])

Если вы хотите сопоставить индексы строк (скопировать с заданного номера строки в df2 на тот же номер строки в df1), то вы можете использовать это:

In [403]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin(range(-5,1))][['grid_U1','grid_U2','grid_U3']]

In [404]: df1
Out[404]: 
    col2_0   col3_0   col4_0
0  413.714  415.796  416.757
1  413.797  415.909  416.853
2  413.926  416.117  417.090
3  414.037  416.093  417.158
4  414.066  416.163  417.175
5  414.064  416.183  417.085
6      NaN      NaN      NaN
7      NaN      NaN      NaN
8      NaN      NaN      NaN
9      NaN      NaN      NaN

Я подтверждаю, что это совпадает с номерами строк, выбрав значения меток времени, которые не встречаются вверху:

In [405]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin([-3,-1])][['grid_U1','grid_U2','grid_U3']]

In [406]: df1
Out[406]: 
    col2_0   col3_0   col4_0
0      NaN      NaN      NaN
1      NaN      NaN      NaN
2  413.926  416.117  417.090
3      NaN      NaN      NaN
4  414.066  416.163  417.175
5      NaN      NaN      NaN
6      NaN      NaN      NaN
7      NaN      NaN      NaN
8      NaN      NaN      NaN
9      NaN      NaN      NaN

Если вы хотите вместо этого заполнить сверху df1, вы можете добавить вызов reset_index в конце (вам нужно drop = True, чтобы избежать добавления дополнительного столбца индекса в):

In [412]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin([-3,-1])][['grid_U1','grid_U2','grid_U3']].reset_index(drop=True)

In [413]: df1
Out[413]: 
    col2_0   col3_0   col4_0
0  413.926  416.117  417.090
1  414.066  416.163  417.175
2      NaN      NaN      NaN
3      NaN      NaN      NaN
4      NaN      NaN      NaN
5      NaN      NaN      NaN
6      NaN      NaN      NaN
7      NaN      NaN      NaN
8      NaN      NaN      NaN
9      NaN      NaN      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...