Я не знаю, ясно ли я. У меня есть два DataFrame:Pandas: как передавать значения по конкретному столбцу, а не по индексу при выполнении арифметической операции?
In [1]: d1 = pd.DataFrame({'a':[1,1,1,2,2,2,3,3,3], 'b':np.random.randint(1,9,9)})
In [2]: d1
Out[2]:
a b
0 1 1
1 1 7
2 1 5
3 2 2
4 2 8
5 2 1
6 3 5
7 3 5
8 3 8
In [3]: d2 = pd.DataFrame({'a':[1,2,3], 'd':[7,2,9]})
In [4]: d2
Out[4]:
a d
0 1 7
1 2 2
2 3 9
Я хочу, чтобы найти строку в Д2 с тем же «а» для каждой строки в d1, и добавить «в» 's «D» в d2 к «В» все соответствующие строки в d1. Другими словами, при выполнении столбцов операции «b» плюс «d» он будет автоматически транслироваться так же, как «a» - это индекс. Результат может выглядеть так:
a b
0 1 8
1 1 14
2 1 12
3 2 4
4 2 10
5 2 3
6 3 14
7 3 14
8 3 17
И я знаю d1.groupby('a').apply(lambda x: x - d2[d2['a']==x.iloc[0]['a']]['d'].values)
может это сделать. Но это кажется слишком сложным.
Следующий код может делать то же самое. Но я думаю, что это неправильный способ использования индекса.
d1.set_index('a', inplace=True)
d2.set_index('a', inplace=True)
d1 + d2
d1.reset_index(inplace=True)
d2.reset_index(inplace=True)
Есть ли причина не держать столбец «a» в качестве индекса? Тогда вам не нужно постоянно устанавливать/переустанавливать индекс. – Rob
@Rob Потому что 'a' может иметь повторяющиеся значения. Дублирующий индекс не может использовать все функции панд. – Yyao