2015-04-14 3 views
0

В Pandas я пытаюсь добавить новый столбец/обновить существующий столбец в фрейм данных (DF2) со значением из другого фрейма данных (DF1). Я могу думать о том, как сделать это в SQLКак обновить столбец в Pandas Dataframe

UPDATE DF2 
SET DF2['Column'] = DF1['Column'] 
FROM DF2 
JOIN DF1 ON DF1['NonIndexColumn'] = DF2['NonIndexColumn'] 

Пример данных:

d =[{'CustomerID': 1, 'SignUpDate': '2014-01-01'}, {'CustomerID': 2, 'SignUpDate': '2014-02-01'}, {'CustomerID': 3, 'SignUpDate': '2014-03-01'}, {'CustomerID': 4, 'SignUpDate': '2014-04-01'}] 
DF1 = pd.DataFrame(data=d) 

d2 = [{'OrderID': 1, 'CustomerID': 1, 'OrderDate': '2014-01-15'}, {'OrderID': 2, 'CustomerID': 1, 'OrderDate': '2014-01-15'}, {'OrderID': 3, 'CustomerID': 2, 'OrderDate': '2014-03-28'}, {'OrderID': 4, 'CustomerID': 1, 'OrderDate': '2014-03-29'}, {'OrderID': 5, 'CustomerID': 3, 'OrderDate': '2014-04-28'}, {'OrderID': 6, 'CustomerID': 2, 'OrderDate': '2014-06-01'}, {'OrderID': 7, 'CustomerID': 1, 'OrderDate': '2014-11-06'}, {'OrderID': 8, 'CustomerID': 3, 'OrderDate': '2015-01-28'}, {'OrderID': 9, 'CustomerID': 1, 'OrderDate': '2015-02-15'} ] 
DF2 = pd.DataFrame(data=d2) 

Я пытаюсь добавить DF1['SignUpDate'] на DF2, так что DF2 будет выглядеть следующим образом:

 CustomerID OrderDate OrderID SignUpDate 
0   1 2014-01-15  1  2014-01-01 
1   1 2014-01-15  2  2014-01-01 
2   2 2014-03-28  3  2014-02-01 
3   1 2014-03-29  4  2014-01-01 
4   3 2014-04-28  5  2014-03-01 
5   2 2014-06-01  6  2014-02-01 
6   1 2014-11-06  7  2014-01-01 
7   3 2015-01-28  8  2014-03-01 
8   1 2015-02-15  9  2014-01-01 

Я знаю, что merge позволит мне добавить столбец, но мне придется либо перезаписать существующий DF, либо создать новый, как это:

DF1 = pd.merge(DF1, DF2) #overwrite 
DF3 = pd.merge(DF1, DF2) #new dataframe 

Есть не способ объединения на одном поле (возможно индексированный столбец, может быть, не индексированный столбец) и обновление/добавить поле?

+2

Пожалуйста, пост исходные данные и желаемый результат, это действительно зависит от того, как отношения ваших данных есть друг с другом, но вы можете попробовать 'df1 [«Column»] = df2 [» Column ']. Where ((df1 [' NonIndexedColumn '] == df2 [' NonIndexedColumn ']) ' – EdChum

ответ

1

Выполните левый merge:

In [4]: 

DF2.merge(DF1, on='CustomerID', how='left') 
Out[4]: 
    CustomerID OrderDate OrderID SignUpDate 
0   1 2014-01-15  1 2014-01-01 
1   1 2014-01-15  2 2014-01-01 
2   2 2014-03-28  3 2014-02-01 
3   1 2014-03-29  4 2014-01-01 
4   3 2014-04-28  5 2014-03-01 
5   2 2014-06-01  6 2014-02-01 
6   1 2014-11-06  7 2014-01-01 
7   3 2015-01-28  8 2014-03-01 
8   1 2015-02-15  9 2014-01-01 
+0

У меня это получилось. Спасибо. В SQL вы можете изменить таблицу и добавить новый столбец. В' pandas' , особенно с этим слиянием, мне нужно будет перезаписать DF2. Является ли эта стандартная функция «pandas» просто для перезаписи? – mikebmassey

+1

Нет, вы можете условно перезаписать, но это зависит от отношения между двумя dfs, поэтому вы можете либо маскировать, либо выбирать строки интереса lhs и rhs и назначить значения – EdChum

Смежные вопросы