Объединение временных рядов временных рядов, в которых дублирующиеся столбцы содержат одинаковые значения

просто используйте специальный метод «__str__» внутри вашего класса. Для класса

Адипрограмм:

def __init__(self, name):
    self.company_name = name

def __str__(self):
    return "I am the Founder of Adiprogrammer!"

yash = Адипрограммер («Aaditya»)

print (yash)

1
задан HS-nebula 18 January 2019 в 16:14
поделиться

1 ответ

Это зависит от того, как вы хотите реализовать логику разрешения информации, которая может не совсем совпадать. Если бы вы объединили несколько кадров, я думаю, что значение modal подходит. Взяв ваш merged_df, мы можем решить его следующим образом:

merged_df = merged_df.groupby([x.split('_')[0] for x in merged_df.columns], 1).apply(lambda x: x.mode(1)[0])

         Date Gender  StudyID SubjectID  Test1  Test2
0  2010-05-08      M      1.0         A    1.0    1.0
1  2010-05-09      M      1.0         A    NaN    2.0
2  2010-05-10      M      1.0         A    2.0    3.0
3  2010-05-08      M      1.0         B    3.0    4.0
4  2010-05-08      F      1.0         C    4.0    NaN
5  2010-05-09      F      1.0         C    NaN    5.0

Или, возможно, вы хотите отдать приоритет ненулевому значению в первом кадре, тогда это .combine_first.

df1.set_index(['SubjectID', 'Date']).combine_first(df2.set_index(['SubjectID', 'Date']))

                     Gender  StudyID  Test1  Test2
SubjectID Date                                    
A         2010-05-08      M      1.0    1.0    1.0
          2010-05-09      M      1.0    NaN    2.0
          2010-05-10      M      1.0    2.0    3.0
B         2010-05-08      M      1.0    3.0    4.0
C         2010-05-08      F      1.0    4.0    NaN
          2010-05-09      F      1.0    NaN    5.0

Если вам нужно объединить много DataFrames, лучше всего использовать reduce из functools.

from functools import reduce

merged_df = reduce(lambda l,r: l.merge(r, on=['SubjectID', 'Date'], how='outer', suffixes=['_l', '_r']), 
                   [df1, df2 ,df1, df2, df2])

У вас будет много перекрывающихся столбцов, но вы все равно сможете их разрешить:

merged_df.groupby([x.split('_')[0] for x in merged_df.columns], 1).apply(lambda x: x.mode(1)[0])

         Date Gender  StudyID SubjectID  Test1  Test2
0  2010-05-08      M      1.0         A    1.0    1.0
1  2010-05-10      M      1.0         A    2.0    3.0
2  2010-05-08      M      1.0         B    3.0    4.0
3  2010-05-08      F      1.0         C    4.0    NaN
4  2010-05-09      M      1.0         A    NaN    2.0
5  2010-05-09      F      1.0         C    NaN    5.0
0
ответ дан ALollz 18 January 2019 в 16:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: