【问题标题】:Lookup values from one dataframe in multiple columns of another dataframe?从另一个数据帧的多列中的一个数据帧中查找值?
【发布时间】:2018-01-10 05:12:48
【问题描述】:

我目前有一个数据框 (df1),其中一列是数字列表。我想在另一个具有两个整数列的数据帧(df2)中查找这些数字,看看 df1 中的数字是否落在这两列的范围之间,并从匹配的行中获取数据。以下是我目前的方法,有没有更好的方法?

for index, row in df1.iterrows():
    print df2[(df2['start'] <=  row['num']) & (df2['end'] >= row['num'])]['data'].iloc[0]

df1 的头部如下所示:

           num
0  1216942535
1  1220432129
2  1501931542

df2 的负责人:

                organization_name       start         end  
0                Service 2000 Srl  1478947232  1478947239  
1  Autolinee F Lli Bucci Urbino P  1478947240  1478947247  
2         S.M.S. DISTRIBUTION SRL  1478947248  1478947255  
3                    ALTOPACK SRL  1478947256  1478947263  
4                   COPYWORLD SRL  1478947264  1478947271  

【问题讨论】:

  • 您要打印这些值吗?或以某种方式存储它们?另外,如果您可以发布df1 和df2 的示例,将会很有帮助
  • 我想将结果存储回原始数据帧 df1、新数据帧或任何类型的可迭代对象。我还添加了数据框的头部。

标签: pandas dataframe


【解决方案1】:

.loc 和布尔数组逻辑的基本使用:

# parentheses are mandatory here
result = df2.loc[(df1.num < df2.end) & (df1.num > df2.start), "organization_name"]

使用最小接线示例进行测试:

df1 = pd.DataFrame(np.random.randint(0, 10, 5))

df2 = pd.DataFrame({
        "orgname": [str(i) for i in range(5)], 
        "start": np.random.randint(-5, 5, 5), 
        "end": np.random.randint(5, 15, 5)
    })[["orgname", "start", "end"]]
df2.loc[(df1[0] < df2.end) & (df1[0] > df2.start), "orgname"]

【讨论】:

  • 如果我想从 D2 获取多列而不只是组织名称,该怎么办
  • 这也给了我一个错误:ValueError: Series lengths must match to compare
  • 是的,我假设您想要逐行比较。对于来自df1 的每一行,您想要所有 来自 df2 的行,其中来自 df1 的行位于来自 df2 的两个行值之间?
猜你喜欢
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 2016-07-24
  • 2020-09-18
相关资源
最近更新 更多