Python - объединение / объединение / объединение столбцов Pandas - PullRequest
0 голосов
/ 23 сентября 2018

Я прочитал учебник по пандам и все еще нуждаюсь в помощи.Я новичок в использовании панд, поэтому, пожалуйста, потерпите меня.

У меня есть CSV, который выглядит так:

#1
identifier1, identifier2,
1.1        , 1.2
2.3        , 4.4

и словарь, который выглядит так:

dict = {'identifier1':'3.3', 'identifier2':'2.3', 'identifier3':'1.6'}

Я хочу обновить этот CSV с помощью этого словаря, чтобы к нему добавлялись столбцы с одинаковыми идентификаторами и создавался столбец для новых идентификаторов.

#2
identifier1, identifier2, identifier3
1.1        , 1.2        , 1.6
2.3        , 4.4        , NaN
3.3        , 2.3        , NaN

Это будет повторное обновление для этого CSV, поэтомув будущем этот процесс будет выглядеть следующим образом:

dict = {'identifier2':'3.5', 'identifier4':'1.5'}
INSERT MERGE CODE HERE
#3
identifier1, identifier2, identifier3, identifier4
1.1        , 1.2        , 1.6        , 1.5
2.3        , 4.4        , NaN        , NaN
3.3        , 2.3        , NaN        , NaN
NaN        , 3.5        , NaN        , NaN

Добавить работает, но не так, как я хочу, он дает мне:

dict = {'identifier2':'3.5', 'identifier4':'1.5'}
new_df = pandas.Dataframe.from_dict(dict, orient='columns')
old_df.append(new_df, True)
#4
identifier1, identifier2, identifier3, identifier4
1.1        , 1.2        , 1.6        , NaN
2.3        , 4.4        , NaN        , NaN
3.3        , 2.3        , NaN        , NaN
NaN        , 3.5        , NaN        , 1.5

Так что, когда новые столбцы сделаны, мне нужнозначения должны быть в верхнем ряду.Как в # 2 или # 3

.merge(old_df, new_df, how='left') 

дает мне старый фрейм данных №2 со сцепленными старыми индексами фреймов данных.

identifier1, identifier2, identifier3, identifier1, identifier2, identifier3,
1.1        , 1.2        , 1.6
2.3        , 4.4        , NaN
3.3        , 2.3        , NaN

&

.merge(old_df, new_df, how='right') 
.merge(old_df, new_df, how='outer') 
.merge(old_df, new_df, how='inner') 

либовернуть мой исходный фрейм данных или что-то, даже не похожее на то, к чему я стремился, например, удалить все строки под индексами.

Спасибо за чтение этого длинного поста, если у вас есть какие-либо вопросы, пожалуйста, оставьте их ниже, и япостараюсь уточнить что-нибудь неоднозначное.

1 Ответ

0 голосов
/ 27 сентября 2018

Создает фрейм данных из заданных данных и задает имена столбцов:

id1 = [1.1, 2.3, 3.3]
id2 = [1.2, 4.4, 2.3]
id3 = [1.6]
DF = pd.DataFrame([id1, id2, id3]).T

DF.columns = ['id1', 'id2', 'id3']

Определен новый фрейм данных для новых данных, добавляемых в фрейм данных:

dict1 = {'id2':'3.5', 'id4':'1.5'}

New_DF = pd.DataFrame.from_dict([dict1])

Идентифицированоимена столбцов, которые находятся в обоих кадрах данных:

Intersection = list(set(DF.columns).intersection(New_DF.columns))

Идентифицированные имена столбцов, которые есть только в новом кадре данных:

Difference = list(set(New_DF.columns) - set(DF.columns))

Конкатенация столбцов в обоих кадрах данных по строкам:

Final_DF = pd.concat([DF, New_DF[Intersection]], axis = 0, sort = False)

Сброс индекса для окончательного фрейма данных:

Final_DF = Final_DF.reset_index(drop = True)

Конкатенация конечного фрейма данных и столбцов, которые только в новом фрейме данных, по столбцам:

Last_DF = pd.concat([Final_DF, New_DF[Difference]], axis = 1, sort = False)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...