Как объединить два фрейма данных, чтобы повторялись уникальные коды их общих столбцов? - PullRequest
0 голосов
/ 07 августа 2020
• 1000 вторые данные - это NaN, а затем идут вторые данные, а столбцы первых данных - NaN. Я удалил повторяющиеся данные, и в исходных наборах данных сначала не было пропущенных значений перед объединением.
ds.head
Out[4]: 
<bound method NDFrame.head of           Date     Pos      Line SHIFT  ... HOUR_BEGIN  HOUR_END TavFormNo    PrgNo
0       960331  P6-212       G23     B  ...      22:40     23:05      1739    10676
1       960331  P6-247       G23     C  ...      05:25     05:35      1739    10676
2       960331  P6-247       G23     C  ...      05:35     05:50      1739    10676
3       960331  P6-247       G23     C  ...      05:50     06:00      1739    10676
4       960331  P6-247       G23     C  ...      06:00     06:15      1739    10676
       ...     ...       ...   ...  ...        ...       ...       ...      ...
209819  960707  D7-132  S4.400-1     C  ...      23:45     07:30     28721  9964282
209820  960707  D7-132  S4.400-1     B  ...      15:30     23:45     28721  9964282
209821  960707  D7-132  S4.400-1     A  ...      07:30     08:00     28721  9964282
209822  960707  D7-132  S4.400-1     A  ...      08:00     09:00     28721  9964282
209823  960707  D7-132  S4.400-1     A  ...      09:00     09:30     28721  9964282

[209824 rows x 10 columns]>

dq.head
Out[5]: 
<bound method NDFrame.head of            Date  ... name manshae zayeat beyn khat
0      13960114  ...                            No
1      13960114  ...                            No
2      13960114  ...                            No
3      13960114  ...                            No
4      13960114  ...                            No
        ...  ...                           ...
27088  13961130  ...                            No
27089  13961130  ...                            No
27090  13961130  ...                            No
27091  13961130  ...                            No
27092  13961130  ...                            No

[27093 rows x 27 columns]>

dq.columns
Out[10]: 
Index(['Date', 'Line', 'Pos', 'PrgNo', 'Code Blank', 'tedad blank',
       'mojavez erfaghi', 'vaziat', 'sazande varagh', 'tedad tolid',
       'tedad zayeat entehaye khotot', 'code irad zayeat', 'name irad zayeat',
       'code manshae zaye', 'name manshae zaye', 'tedad mayob',
       'code irad mayob', 'name irad mayob', 'code manshae mayob',
       'name manshae mayob', 'sum zayeat beyn o enteha khat',
       'tedad moghayerat', 'tedad zayeat beyn khat',
       'code irad zayeat beyne khat', 'name irad zayeat beyn khat',
       'code manshae zayeat beyn khat', 'name manshae zayeat beyn khat'],
      dtype='object')

ds.columns
Out[11]: 
Index(['Date', 'Pos', 'Line', 'SHIFT', 'STOP_CODE', 'DEFFMIN', 'HOUR_BEGIN',
       'HOUR_END', 'TavFormNo', 'PrgNo'],
      dtype='object')

столбцы «Дата», «Поз», «Строка» и «PrgNo» должны совпадать в новых набор данных. Я еще не изменил формат Date to Date, поэтому форматы Date и PrgNo (его производственный код) int и Pos и ​​Line являются объектами. В данных ds и dq ботов отсутствуют пропущенные значения. Я использовал следующие функции:

df2 = pd.merge(dq, ds, on='PrgNo', how='inner',left_index=False, right_index=False)
df2.drop_duplicates(inplace=True)
df2.shape
Out[28]: (429207, 36)

В этих данных нет пропущенных значений, но я не знаю, почему количество строк удваивается.

df = pd.merge(dq, ds, on=('PrgNo','Date','Pos','Line'), how='outer')

df.shape
Out[17]: (236917, 33)

np.sum(df.isna())
Out[18]: 
Date                                  0
Line                                  0
Pos                                   0
PrgNo                                 0
Code Blank                       209824
tedad blank                      209824
mojavez erfaghi                  209824
vaziat                           209824
sazande varagh                   209824
tedad tolid                      209824
tedad zayeat entehaye khotot     209824
code irad zayeat                 209824
name irad zayeat                 209824
code manshae zaye                209824
name manshae zaye                209824
tedad mayob                      209824
code irad mayob                  209824
name irad mayob                  209824
code manshae mayob               209824
name manshae mayob               209824
sum zayeat beyn o enteha khat    209824
tedad moghayerat                 209824
tedad zayeat beyn khat           209824
code irad zayeat beyne khat      209824
name irad zayeat beyn khat       209824
code manshae zayeat beyn khat    209824
name manshae zayeat beyn khat    209824
SHIFT                             27093
STOP_CODE                         27093
DEFFMIN                           27093
HOUR_BEGIN                        27093
HOUR_END                          27093
TavFormNo                         27093
dtype: int64

d = pd.concat([dq, ds],axis=0, join='outer', ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=False)

d.shape
Out[20]: (236917, 33)

np.sum(d.isna())
Out[21]: 
Date                                  0
Line                                  0
Pos                                   0
PrgNo                                 0
Code Blank                       209824
tedad blank                      209824
mojavez erfaghi                  209824
vaziat                           209824
sazande varagh                   209824
tedad tolid                      209824
tedad zayeat entehaye khotot     209824
code irad zayeat                 209824
name irad zayeat                 209824
code manshae zaye                209824
name manshae zaye                209824
tedad mayob                      209824
code irad mayob                  209824
name irad mayob                  209824
code manshae mayob               209824
name manshae mayob               209824
sum zayeat beyn o enteha khat    209824
tedad moghayerat                 209824
tedad zayeat beyn khat           209824
code irad zayeat beyne khat      209824
name irad zayeat beyn khat       209824
code manshae zayeat beyn khat    209824
name manshae zayeat beyn khat    209824
SHIFT                             27093
STOP_CODE                         27093
DEFFMIN                           27093
HOUR_BEGIN                        27093
HOUR_END                          27093
TavFormNo                         27093
dtype: int64

В этих функциях идет набор данных df сначала, а затем приходит набор данных ds. Примечание: количество уникальных переменных в PrgNo не соответствует размеру наборов данных. Я имею в виду, что переменные prgno были повторены!

...