pandas - изменить значение [row_x, col_d] на [raw_y, col_a] на основе сравнения [raw_x, col_b] & [raw_y, col_c] - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть таблица, как показано ниже (упрощенная) enter image description here

Я хочу выбрать каждое сырье и сравнить его значение Col_b со значением Col_c всех остальных необработанных данных.Если они равны, присвойте / добавьте соответствующее значение Col_a необработанного необработанного значения для значения Col_d выбранного необработанного необработанного текста

Таблица результатов будет выглядеть следующим образом: enter image description here

Традиционный метод с несколькимидля циклов / while я понимаю.Существуют ли эффективные способы решения этой проблемы в пандах, пупках и т. Д.

1 Ответ

0 голосов
/ 02 февраля 2019

Вы можете использовать transform и np.where:

df = pd.DataFrame({'Col_a':['A1','Z7.6','B1.1','C2','A1.3','P7.6'],
                  'Col_b':[120,-1,78,180,6,8],
                  'Col_c':[-7,45,120,32,180,120]})
def f(x):
    rowindx = np.where(df.Col_c == x)
    res = ' '.join(df.loc[rowindx[0], 'Col_a'])
    return res

df['Col_d'] = df['Col_b'].transform(f)
df

Выход:

  Col_a  Col_b  Col_c      Col_d
0    A1    120     -7  B1.1 P7.6
1  Z7.6     -1     45           
2  B1.1     78    120           
3    C2    180     32       A1.3
4  A1.3      6    180           
5  P7.6      8    120           

Вы можете попробовать это, используя apply и np.where:

def f(x):
    rowindx = np.where(df.Col_c == x.Col_b)
    res = ' '.join(df.loc[rowindx[0], 'Col_a'])
    return res

df['Col_d'] = df.apply(f, axis=1)
print(df)

Вывод:

  Col_a  Col_b  Col_c      Col_d
0    A1    120     -7  B1.1 P7.6
1  Z7.6     -1     45           
2  B1.1     78    120           
3    C2    180     32       A1.3
4  A1.3      6    180           
5  P7.6      8    120           
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...