Deedle - 按列区分

2024-03-14

前几天我遇到了一个情况,我的某个特定专栏Frame有一些重复的值。

我想删除所述列具有重复值的任何行。

我设法使用过滤器函数破解了一个解决方案,虽然它对于手头的探索性数据分析来说已经足够好了,但它应该更加痛苦。

尽管四处寻找,我还是找不到任何关于优雅解决方案的想法。

我还注意到Series不提供DistincyBy()或类似的。

如何对特定列执行“DistinctBy”操作?


一种方法是使用nest and unnest,像这样:

let noDuplicates: Frame<(int*string), string> =
  df1
  |> Frame.groupRowsBy "Tomas"
  |> Frame.nest
  |> Series.mapValues (Frame.take 1)
  |> Frame.unnest

让我们解释一下每个步骤。想象一下你有这个数据框:

// Create from individual observations (row * column * value)
let df1 = 
  [ ("Monday", "Tomas", 1); ("Tuesday", "Adam", 2)
    ("Tuesday", "Tomas", 4); ("Wednesday", "Tomas", -5)
    ("Thursday", "Tomas", 4); ("Thursday", "Adam", 5) ]
  |> Frame.ofValues
            Tomas Adam      
Monday    -> 1     <missing> 
Tuesday   -> 4     2         
Wednesday -> -5    <missing> 
Thursday  -> 4     5     

您想要删除“Tomas”列中包含重复值的行。

首先,按此列分组。

let df2 : Frame<(int * string), string> = df1 |> Frame.groupRowsBy "Tomas"
                Tomas Adam      
1  Monday    -> 1     <missing> 
4  Tuesday   -> 4     2         
4  Thursday  -> 4     5         
-5 Wednesday -> -5    <missing> 

现在您有了一个具有两级索引的框架,您可以将其转换为一系列数据框架。

let df3 = df2 |> Frame.nest
          Tomas Adam      
Monday -> 1     <missing> 

            Tomas Adam 
Tuesday  -> 4     2    
Thursday -> 4     5    

             Tomas Adam      
Wednesday -> -5    <missing> 

取每一帧的第一行。

let df4 = df3 |> Series.mapValues (fun fr -> fr |> Frame.take 1)
          Tomas Adam      
Monday -> 1     <missing> 

           Tomas Adam 
Tuesday -> 4     2    

             Tomas Adam      
Wednesday -> -5    <missing> 

仍然需要执行向后转换:从一系列数据帧转换为具有两级索引的帧。

let df5 = df4 |> Frame.unnest
                Tomas Adam      
-5 Wednesday -> -5    <missing> 
1  Monday    -> 1     <missing> 
4  Tuesday   -> 4     2         
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Deedle - 按列区分 的相关文章

  • 不可为空字符串的 F# 类型别名

    我的代码中有一些域类型 我用它们来区分不同类型的字符串 因此编译器可以阻止我 例如以错误的顺序传递参数 type Foo string type Bar string let baz foo Foo bar Bar printfn A A
  • 作为参数的函数的类型推断

    我想编写一个函数 它接受几个元组作为参数 并用元素选择它们并传递给另一个函数 其中 i 作为另一个参数给出 我已经尝试过这样的事情 let function tup1 A A tup2 B B i otherFunction i tup1
  • 为什么没有List.skip和List.take?

    为什么没有List skip和List take 当然有 Seq take 和 Seq skip 但它们不会因此创建列表 一种可能的解决方案是 mylist gt Seq skip N gt Seq toList 但这会创建第一个枚举器 然
  • F# 的 timeit 函数

    我想写一些类似的东西 let timeit x a gt b let start System DateTime Now x let duration System DateTime Now start printfn time usage
  • 使用实体框架代码优先的 FSharp 记录类型

    我正在一个业务应用程序中进行概念验证 我想用 F 替换当前的 C 代码优先实体框架实现 我正在关注this http blogs msdn com b visualstudio archive 2011 04 04 f code first
  • F# 类型函数和 [] 属性

    这两个 F 类型函数有什么区别 let defaultInstance1 lt a when a new unit gt a gt new a
  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • F# 设置带有参数的 SQLCommand 的最佳方法

    我的 F 程序需要与 SQL Server 通信 在一部分中我有这样的事情 let workFlowDetailRuncommand new SqlCommand query econnection workFlowDetailRuncom
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • F#、FParsec 和递归调用流解析器(第二次)

    感谢您的回复我的第一篇文章 https stackoverflow com questions 26853718 f fparsec and calling a stream parser recursively and 我的第二篇文章 h
  • 绘图 Deedle 框架

    我有以下代码 let mychart frame GetAllSeries gt Seq iter fun key value gt Chart Line value Name key gt Chart Combine where fram
  • 如何搭建Windows Phone开发环境并使用F#开发应用程序?

    我已经下载了Windows Phone开发工具 但我不知道如何使用F 来开发应用程序 目前是C 将 F 和 Windows Phone 模板安装到 Visual Studio 中可以让生活变得更轻松 如果您打开 Visual Studio
  • F# 中序列的递归函数

    这是一个相当微不足道的问题 但快速的谷歌搜索并没有给我答案 为序列编写递归函数的标准方法是什么 对于列表 您可以使用空列表和头 尾模式进行模式匹配 序列的等效项是什么 没有标准的方法可以做到这一点 因为您很少为序列编写递归函数 您应该查看各
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • 是 F# 映射上的迭代还是集合中序遍历?

    AFAIK F Map 和 set 被实现为红黑树 所以我猜这些的迭代将是有序遍历 我做了一些测试 迭代结果总是排序的 但我想确定一下 是按顺序遍历吗 MSDN 上的文档非常适合解决这个问题 例如 返回值Set toSeq http msd
  • 如何在 FsCheck 中注册任意实例并让 xUnit 使用它?

    我有一个类型Average有一个字段count这是积极的int64 and a double字段称为sum 我做了一个任意的生成有效实例的操作 let AverageGen Gen map2 fun s c gt Average float
  • F# 获取随机数列表

    我正在尝试用随机数填充列表 但很难获得随机数部分 我现在打印出一个随机数 10 次 我想要的是打印出 10 个不同的随机数 let a new System Random Next 1 1000 let listOfSquares for
  • 该表达式的类型为 int,但此处与 unit 类型一起使用

    我试图在 F 中获得与此 vb net 代码完全相同的 非功能性的 Function FastPow ByVal num As Double ByVal exp As Integer As Double Dim res As Double
  • 从 C# 调用高阶 F# 函数

    给定 F 高阶函数 在参数中采用函数 let ApplyOn2 f int gt int f 2 和 C 函数 public static int Increment int a return a 我怎么打电话ApplyOn2 with I
  • 将属性应用于返回值 - 在 F# 中

    在 C 中 可以将属性应用于方法的返回 return DynamicAttribute public object Xyz return new ExpandoObject 这在 F 中可能吗 背景 我想要一个用 F 编写的库的方法 该方法

随机推荐