【问题标题】:Merging Dataframes not based on index but values合并数据框不是基于索引而是值
【发布时间】:2020-06-10 06:43:29
【问题描述】:

我有 2 个要合并的数据框。

第一个 df 总结了每个城镇最常见的 5 个场所:

第二个df总结了每个城镇中每个场地类别的频率:

我想合并两个数据框,以便前 5 个场所的频率也出现在第一个 df 中。

例如。

第 0 行的输出:

Ang Mo Kio | Food Court | Coffee Shop | Dessert Shop | Chinese Restaurant | Jap Restaurant | 0.64 | 0.2 | 0.1 | ....

我尝试过使用 .merge pandas

sg_venues_sorted.merge(sg_onehot_grouped, on='Town')

但这似乎仅用于合并索引或列名。如果我的合并位于 1 df 的列名和另一个 df 的值上怎么办?

谢谢!

【问题讨论】:

  • “我试过使用 .merge pandas”的代码在哪里?

标签: python pandas merge


【解决方案1】:

我认为你可以在不合并的情况下做到这一点。像这样的逐行操作

    import pandas as pd
    df1 = pd.DataFrame({"Town":['t1','t2','t3','t4','t5'],
                       "1stcommon":["c1","c2","c3","c4","c5"],
                       "2ndcommon":["c3","c8","c1","c9","c10"]})

    df2 = pd.DataFrame({"Town":['t1','t2','t3','t4','t5'],
                       "c1":[0,0.1,0.1,0.2,0],
                       "c2":[0,0.1,0.1,0.2,0],
                       "c3":[0,0.1,0.1,0.2,0],
                       "c4":[0,0.1,0.1,0.2,0],
                       "c5":[0,0.1,0.1,0.2,0],
                       "c6":[0,0.1,0.1,0.2,0],
                       "c7":[0,0.1,0.1,0.2,0],
                       "c81":[0,0.1,0.1,0.2,0],
                       "c9":[0,0.1,0.1,0.2,0],
                        "c10":[0,0.1,0.1,0.2,0]})

    def create_col(x):
        return df2.loc[df2.Town==x['Town'],x[['1stcommon','2ndcommon']]].values[0]

    df1['1st_common'],df1['2nd_common'] = zip(*df1.apply(lambda x: create_col(x),axis=1))

【讨论】:

  • 这行得通,谢谢!但我仍然对 lambda 的工作原理感到困惑……似乎它是一个非常有用的工具
猜你喜欢
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2018-11-09
  • 2021-04-21
相关资源
最近更新 更多