【问题标题】:Filling a pandas data frame with values from another data frame (combinations)用另一个数据框(组合)中的值填充熊猫数据框
【发布时间】:2017-08-03 13:44:19
【问题描述】:

这是一个关于组合和 pandas 的小练习。

我目前有一个 pandas 数据框,例如:

|节点1 |节点2|距离|
|悉尼|堪培拉|100|
|墨尔本|悉尼| 200|
|堪培拉|墨尔本| 150|

然后我创建一个新的数据框,因此列标题和行名是节点的唯一值。

mat = pd.DataFrame(index = np.unique(df.node1), columns = np.unique(df.node1))

node1 或 node2 在这里就足够了,因为在构建数据框时顺序并不重要。

这会产生我想要的但填充了 NaN 值。

如何在不写一些丑陋的循环的情况下用距离列中的值填充垫子?

谢谢

【问题讨论】:

  • 列和索引是node1创建的吗?
  • 你能添加组合数据框吗?

标签: python pandas


【解决方案1】:

首先将pivotset_indexunstack 一起使用:

mat = df.pivot(index='node1', columns='node2', values='distance')
print (mat)
node2      Canberra  Melbourne  Sydney
node1                                 
Canberra        NaN      150.0     NaN
Melbourne       NaN        NaN   200.0
Sydney        100.0        NaN     NaN

mat = df.set_index(['node1', 'node2'])['distance'].unstack()
print (mat)
node2      Canberra  Melbourne  Sydney
node1                                 
Canberra        NaN      150.0     NaN
Melbourne       NaN        NaN   200.0
Sydney        100.0        NaN     NaN

然后是combine_firstT

mat = mat.combine_first(mat.T)
print (mat)
           Canberra  Melbourne  Sydney
node1                                 
Canberra        NaN      150.0   100.0
Melbourne     150.0        NaN   200.0
Sydney        100.0      200.0     NaN

【讨论】:

  • 谢谢@jezrael 我忘了pivot。附加问题,有没有办法我也可以反向填充,例如悉尼 -> 堪培拉 = 100 太棒了!但也填充堪培拉 -> 悉尼 = 100?
  • 事实上,如果我让 mat2 = df.pivot(index='node2', columns='node1', values='distance') 我会得到相反的结果。现在我需要一种方法来合并这两个数据框。
  • 是的,或者然后使用df1.combine_first(df2
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多