2014-10-10 3 views
2

Я искал архив, но не нашел то, что хотел (вероятно, потому что я не знаю, какие ключевые слова использовать)Merge панды dataframe с работы колонки

Вот моя проблема: у меня есть куча данные должны быть объединены; Я также хочу обновить значения поднабора столбцов с суммой по кадрам данных.

К примеру, у меня есть два dataframes, DF1 и df2:

df1=pd.DataFrame([ [1,2],[1,3], [0,4]], columns=["a", "b"]) 
df2=pd.DataFrame([ [1,6],[1,4]], columns=["a", "b"]) 

    a b   a b 
0 1 2  0 1 5 
1 1 3  2 0 6 
2 0 4  

после слияния, я хотел бы иметь колонку «Ъ» обновляется с суммой соответствующих записей, а столбец «а» должно быть так же, как df1 (или df2, на самом деле не волнует), как и раньше:

a b 
0 1 7 
1 1 3 
2 0 10 

Теперь, расширить это объединение трех или более кадров данных.

Есть ли простые, встроенные трюки, чтобы сделать это? или мне нужно обрабатывать один за другим, по очереди?

===== Редактировать/Разъяснение =====

В реальном мире, например, каждый кадр данных может содержать индексы, которые не в других кадрах данных. В этом случае объединенный фрейм данных должен иметь все из них и обновлять общие записи/индексы суммой (или некоторой другой операцией).

+0

В этом случае вам, возможно, придется объединить/объединить все dfs вместе, а затем суммировать все столбцы, где есть столкновения, игнорирующие значения «NaN» – EdChum

+0

Это то, что я закончил экспериментировать. объединенный фрейм данных имеет несколько столбцов с одинаковыми именами. Первоначально функция 'sum' возвращает ошибку, но оказывается, что обновление pandas до текущей версии исправлено. – xyliu00

+0

Вы должны опубликовать ответ, если он сработает для вас, ни одно из слияний, join, concat не сделает то, что вы хотите, потому что по существу вы не объединяете данные, которые выполняете операцию, поэтому они совершенно разные, поэтому я не вижу, как это может быть делать за один проход – EdChum

ответ

0

Только частичное, неполное решение. Но основное решение решается:

df3 = pd.concat([df1, df2], join = "outer", axis=1) 
df4 = df3.b.sum(axis=1) 

df3 будет иметь два столбца «a» и два столбца «b». функция sum() на df3.b добавляет два столбца «b» и игнорирует NaN. Теперь df4 имеет столбец «b» с суммой столбцов «b» df1 и df2 и все индексы.

не решил колонку «а». В моем реальном случае в df3.a имеется довольно мало числа NaN, тогда как другие в df3.a должны быть одинаковыми. Я не нашел простой способ сделать столбец «a» в df4 и заполнить значение не-NaN. Теперь поиск функции «count» для получения элементов в строках df3.a (представьте, что у него несколько десятков столбцов «a»).

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