试图在Pandas中比较不同的表并根据比较删除行

  • 本文关键字:比较 删除行 Pandas python pandas
  • 更新时间 :
  • 英文 :


我现在有两个不同的表。这些表包含一系列信息,其中一列是特定的日期。

的例子:

[Table 1]
Unique Identifier (Primary Key) / Date / Piece of Information
0001 / December 1, 2020 / Apples
[Table 2]
Unique Identifier (Primary Key) / Date / Piece of Information
0001 / December 5, 2020 / Oranges

我试图比较两个表,如果第二个表有一个日期是第一个表之后(对于相同的唯一标识符),我想把它写到一个新表。这个表中有很多行,我需要继续遍历这些行。然而,我似乎不能得到这个工作。这就是我正在做的:

import pandas as pd
from pyspark.sql.functions import desc
from pyspark.sql import functions as F
def fluvoxamine_covid_hospital_progression(fluvoxamine_covids_that_were_also_in_hospital_at_any_time, fluvoxamine_for_hospitalization_analysis_only_outpatients_need_to_dbl_chk):
df_fluvoxamine_covid_outpatients = pd.DataFrame(fluvoxamine_for_hospitalization_analysis_only_outpatients_need_to_dbl_chk)
df_fluvoxamine_covid_outpatients.dropDuplicates(['visit_occurrence_id'])
df_fluvoxamine_covid_outpatients.sort(desc('visit_start_date'))
df_fluvoxamine_converted_hospital = pd.DataFrame(fluvoxamine_covids_that_were_also_in_hospital_at_any_time)
df_fluvoxamine_converted_hospital.dropDuplicates(['visit_occurrence_id'])
df_fluvoxamine_converted_hospital.sort(desc('visit_start_date'))
i = 0
if df_fluvoxamine_covid_outpatients.sort('visit_start_date') < df_fluvoxamine_converted_hospital.sort('visit_start_date'):
i = i + 1

试着把它分成几个步骤。为了便于阅读,我重命名了你的变量。

# renamed variables
converted = fluvoxamine_covids_that_were_also_in_hospital_at_any_time
outpatients = fluvoxamine_for_hospitalization_analysis_only_outpatients_need_to_dbl_chk

对于第一步,保留您所写的前几行代码。

# Load and clean the data
covid_outpatients = pd.DataFrame(outpatients)
converted_hospital = pd.DataFrame(converted)
covid_outpatients.dropDuplicates(['visit_occurrence_id'])
converted_hospital.dropDuplicates(['visit_occurrence_id'])

接下来,使用唯一标识符列连接数据。

all_data = covid_outpatients.set_index('Unique Identifier (Primary Key)').join(converted_hospital.set_index('Unique Identifier (Primary Key)'), lsuffix='_outpatients', rsuffix='_converted')

用唯一标识符列重置索引

all_data['Unique Identifier (Primary Key)'] = all_data.index
all_data.reset_index(drop=True, inplace=True)

根据日期比较生成掩码。掩码是一系列布尔值,具有与DataFrame相同的大小/形状。在此例中,如果outpatients日期小于converted日期,则掩码为True,否则序列中的值为False

filtered_data = all_data[all_data['visit_start_date_outpatients'] < all_data['visit_start_date_converted']]

注意,如果您的数据不是日期格式,则可能需要对其进行转换或强制转换以使掩码正常工作。

最后,将输出保存为逗号分隔的CSV文件。

// Generate an output. For example, it's easy to save it as a CSV file.
filtered_data.to_csv('outpatient_dates_less_than_converted_dates.csv')

除了pandas dataframes的官方文档之外,网站https://towardsdatascience.com/还有许多很好的提示。我希望这对你有帮助!

最新更新