【发布时间】:2020-04-19 17:12:33
【问题描述】:
每个人。我在尝试使用 Python Pandas 库将一个数据帧中的行与另一个数据帧匹配时遇到了问题。
我有两个数据框 df_1 和 df_2,它们具有三个完全相同的列:“日期”、“位置”和“数据”列。 df_1 中的位置值是正确的,但是,在 df_2 中,某些位置值不正确。总而言之,我想要做的是将所有三列及其各自的值保留在 df_2 中,但“位置”列中的值与“位置”中的值不匹配的行除外df_1 的列。
看起来像这样:
df_1:
Date Location Data
1/1/2000 12345670 57.573
1/1/2000 12345671 67.374
1/1/2000 12345672 56.926
1/1/2000 12345673 62.492
1/1/2000 12345674 65.735
1/2/2000 12345670 56.684
1/2/2000 12345671 58.243
1/2/2000 12345672 60.305
1/2/2000 12345673 61.294
df_2:
Date Location Data
1/1/2000 12345670 64.684
1/1/2000 12345671 55.574
1/1/2000 12345672 53.983
1/1/2000 12345673 63.103
1/1/2000 12345674 69.485
1/1/2000 EUF57324 57.682
1/1/2000 ARIF6872 56.773
1/1/2000 GHUEF398 65.126
1/2/2000 12345670 62.503
1/2/2000 12345671 60.604
1/2/2000 MAR40521 54.468
1/2/2000 WOP68494 67.295
如您所见,df_2 的“位置”列中的某些值与 df_1 中的数值特征不同。 df_2 的“位置”列中的其他值与 df_1 的“位置”列重叠。我只想将 df_2 的“日期”和“位置”列中的行与 df_1 的“位置”和“日期”列中的行匹配,以便df_2 中的奇数位置值被省略。我不需要 df_1 中的“Data”列,只需要“Date”和“Location”列来匹配。
我希望匹配的数据框如下所示:
Matched_df_2:
Date Location Data
1/1/2000 12345670 64.684
1/1/2000 12345671 55.574
1/1/2000 12345672 53.983
1/1/2000 12345673 63.103
1/1/2000 12345674 69.485
1/2/2000 12345670 62.503
1/2/2000 12345671 60.604
奇数位置值将消失。
我尝试使用 pandas 中的“合并”功能进行连接,但它一直给我一个空数据框。
import pandas as pd
df_1 = pd.read_csv('file_1.csv')
df_2 = pd.read_csv('file_2.csv')
df_1 = df_1.astype({'Location': 'object'}) #conversion of datatype to "object" from int64
print(df_1)
print(df_2)
df_merge = pd.merge(df_1, df_2, on=['Date', 'Location'])
print(df_merge)
#It returns an empty dataframe, as shown below
Empty DataFrame
Columns: [Date, Location, df_1_data, df_2_data]
Index: []
我认为我只是在合并时遗漏了一些东西。在 SQL 中,使用 INNER JOIN 或匹配 WHERE 语句来将 data_table_2 的“日期”和“位置”中的行与 data_table_1 中的行进行匹配是很简单的。
我希望我在这里写的东西是有意义的。感谢您的帮助。
【问题讨论】:
-
是否准确地说您只想要 df_2 中与 df_1 中的位置有对应匹配的值?此外,df_1 中与 df_2 不匹配的位置不存在或可以忽略?
-
@JeffH,对于您的第一个问题,是的,这是准确的。对于您的第二部分,如果 df_2 中的位置值与 df_1 中的位置值不匹配,我希望它被忽略。
标签: python database pandas dataframe