объединение двух расписаний с некоторыми опущенными данными - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть два кадра данных:

df_old:

A   B   C   D   E
1   b1  c   d1  e1
2   b2  c   d2  e2
3   b3  c   d3  e3

df:

A   B   C    D   F  
2   b2  c2   d0  f2
4   b4  c1   d4  f4
5   b5  c2   d5  f5

Что я хочу, чтобы они слились в:

A   B   C    D   E   F  
1   b1  c   d1  e1   
2   b2  c2  d2  e2   f2
3   b3  c   d3  e3   
4   b4  c1  d4       f4
5   b5  c2  d5       f5

Я использую этот код, но есть проблема, когда речь идет о пропущенных строках, как в df ['A'] строках 1 и 3:

df1 = df_old.loc[:,df_old.columns != 'C']
df2 = df.loc[:len(df_old)-1, df.columns != 'B']
df2 = df2.loc[:, df2.columns != 'D']
df_m = pandas.merge(df1, df2,
                            how='outer', on=['A'])
df_m = pandas.merge(df_m, df.loc[len(df_old)-1:, ],
                            how='outer', on=['A', 'B', 'D', 'F']) 

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

append, groupby / agg и last / first.

В некоторых столбцах вы хотите сохранить один из первого кадра данных.В других столбцах вы предпочитаете значение во втором кадре данных.Если вы используете agg, вы можете контролировать, какие столбцы и какие.Обязательно наберите append в соответствующем порядке, который имеет смысл с выбранным вами last / first.

d = {'B': 'last', 'C': 'last', 'D': 'first', 'E': 'last', 'F': 'first'}
df_old.append(df).groupby('A', as_index=False).agg(d)

   A   B   C   D    E    F
0  1  b1   c  d1   e1  NaN
1  2  b2  c2  d2   e2   f2
2  3  b3   c  d3   e3  NaN
3  4  b4  c1  d4  NaN   f4
4  5  b5  c2  d5  NaN   f5
0 голосов
/ 28 февраля 2019

Проверка с combine_first

df_old.set_index('A',inplace=True)
df1.set_index('A',inplace=True)
yourdf=df_old.combine_first(df1)
yourdf.reset_index(inplace=True)

yourdf.update(df1[['C']])
yourdf
Out[80]: 
    B   C   D    E    F
A                      
1  b1   c  d1   e1  NaN
2  b2  c2  d2   e2   f2
3  b3   c  d3   e3  NaN
4  b4  c1  d4  NaN   f4
5  b5  c2  d5  NaN   f5
...