【问题标题】:Python Pandas : Extend operation of a column if a condition matchesPython Pandas:如果条件匹配,则扩展列的操作
【发布时间】:2019-09-10 15:40:39
【问题描述】:

我有两个不同的数据框,即,

firstDF = pd.DataFrame([{'mac':1,'location':['kitchen']}])
predictedDF = pd.DataFrame([{'mac':1,'location':['lab']}])

如果 predictDF 的 mac 列值包含在 firstDF 的 mac 列值中,则 firstDF 的 location 列值应该扩展 predictDF 的 location 列,并且 firstDF 的结果应该是,

firstDF
      mac    location
0     1      ['kitchen','lab']

我试过了,

firstDF.loc[firstDF['mac'] == predictedDF['mac'], 'mac'] = firstDF.loc[firstDF['location'].extend(predictedDF['location']), 'location']

虽然返回相同,

AttributeError: 'Series' object has no attribute 'extend'

【问题讨论】:

  • 我添加了更多值的测试,输出是你需要的吗?

标签: python-3.x pandas


【解决方案1】:

如果在location 列中首先列出DataFrame.merge 一个DataFrame,然后加入+DataFrame.pop 以提取列(使用和删除):

df = firstDF.merge(predictedDF, on='mac', how='left')
df['location'] = df.pop('location_x') + df.pop('location_y')
print (df)
   mac        location
0    1  [kitchen, lab]

使用更多值进行测试 - 如果缺少值,则将其替换为 []

firstDF = pd.DataFrame({'mac':[1, 2],'location':[['kitchen'],['kitchen']]})
predictedDF = pd.DataFrame([{'mac':1,'location':['lab']}])

df = firstDF.merge(predictedDF, on='mac', how='left').applymap(lambda x: x if x == x else [])
df['location'] = df.pop('location_x') + df.pop('location_y')
print (df)
   mac        location
0    1  [kitchen, lab]
1    2       [kitchen]

【讨论】:

  • 谢谢,确实是个需要注意的案例。在df中保留mac=2的位置列值怎么样?
  • @MahamuthaM - 然后可以用 applymap 替换 [] 的缺失值。答案已编辑。
猜你喜欢
  • 2017-12-25
  • 2022-01-27
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
相关资源
最近更新 更多