использовать сетку для строк с общими значениями в столбце - PullRequest
3 голосов
/ 01 октября 2019

мои данные:

df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 2, 3], [7, 8, 8]]),columns=['a', 'b', 'c'])
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 2, 3], [5, 8, 8]]),columns=['a', 'b', 'c'])

df1,df2:
   a  b  c
0  1  2  3
1  4  2  3
2  7  8  8

   a  b  c
0  1  2  3
1  4  2  3
2  5  8  8

Я хочу объединить строки из столбцов a из обоих df во всех последовательностях, но только там, где значения в столбцах b и c равны. Сейчас у меня есть единственное решение для всех в целом с этим кодом:

x = np.array(np.meshgrid(df1.a.values, 
  df2.a.values)).T.reshape(-1,2)
df = pd.DataFrame(x)
    print(df)
   0  1
0  1  1
1  1  4
2  1  5
3  4  1
4  4  4
5  4  5
6  7  1
7  7  4
8  7  5

ожидаемый вывод для df1.a and df2.a только для строк, где df1.b==df2.b and df1.c==df2.c:

   0  1
0  1  1
1  1  4
2  4  1
3  4  4
4  7  5

, поэтому в основном мне нужногруппировать по общим строкам в выбранных столбцах b и c

1 Ответ

1 голос
/ 01 октября 2019

Вы должны попробовать DataFrame.merge , используя внутреннее слияние:

df1.merge(df2, on=['b', 'c'])[['a_x', 'a_y']]

   a_x a_y
0   1   1
1   1   4
2   4   1
3   4   4
4   7   5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...