【问题标题】:How can I subset a data frame based on a list of unique values in a columns of that same data frame?如何根据同一数据框的列中的唯一值列表对数据框进行子集化?
【发布时间】:2019-04-23 13:54:11
【问题描述】:

我有一个看起来像这样的简单数据框。我希望能够选择 LOC 是纽约的所有行,子集这个数据框并将其标记为一个变量,我可以使用它来将纽约行附加到我使用 win32 创建的电子邮件给联系人。然后搬到波士顿做同样的事情,等等。我不知道如何在没有明确命名的情况下提取 LOC 行。我希望它随着 LOC 值的变化而动态变化。

    Contact          LOC     ...     Add_Move  First Name
0   mike@osjloc1.com     New York     ...          Add         Joe
1   mike@osjloc1.com     New York     ...         Move        Stan
2   mike@osjloc1.com     New York     ...          Add        Rick
3   mike@osjloc1.com     New York     ...          Add        Mike
4   jeff@osjloc2.com       Boston     ...          Add       Sonya
5   jeff@osjloc2.com       Boston     ...         Move        Matt
6   jeff@osjloc2.com       Boston     ...         Move       Randy
7   jeff@osjloc2.com       Boston     ...          Add         Sue
8    dave@osjloc.com  Los Angeles     ...          Add        Jill
9    dave@osjloc.com  Los Angeles     ...         Move       Steve
10   dave@osjloc.com  Los Angeles     ...          Add        Bill

【问题讨论】:

    标签: python loops dataframe filter


    【解决方案1】:

    布尔索引。您可以根据列值屏蔽数据框中的列 https://www.geeksforgeeks.org/boolean-indexing-in-pandas/

    获取 DataFrame 中的所有唯一位置。

    locations = set(df.loc[:,"LOC"])
    

    locations 将返回一组 {"New York","Boston",...}

    for location in locations:
        variable = df[df["LOC"]==location]
    

    for 循环将遍历创建的一组值。要根据列值过滤数据,我们可以根据 ==、!=、...等运算符创建掩码。

    【讨论】:

      【解决方案2】:

      你可以使用pandasgroupby

      groups = yourdataframe.groupby('LOC')
      

      groups 包含根据'LOC' 列拆分的数据帧子集。如果您对其进行迭代,则每次迭代都会有一个 2 长度的元组。广告索引0,对应'LOC'的值的字符串,索引1对应子集的数据帧(仍然是数据帧)。

      for locname, subset in groups:
          #do whatever you want with the subset
      

      不确定您需要做什么,但例如,要打印电子邮件列表,您可以这样做:

      for locname, subset in groups:
          print(subset['Contact'])
      

      【讨论】:

        猜你喜欢
        • 2016-12-15
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        • 2013-04-22
        • 2022-08-21
        相关资源
        最近更新 更多