如何基于同一数据帧的列中的唯一值列表对数据帧进行子集设置?

时间:2019-04-23 13:54:11

标签: python loops dataframe filter

我有一个看起来像这样的简单数据框。我希望能够选择LOC是New York的所有行,将此数据框子集并将其标记为变量,可以用来将New York行添加到使用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

2 个答案:

答案 0 :(得分:0)

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

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

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

位置将返回一组{“纽约”,“波士顿”,...}

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

for循环将遍历创建的值集。要基于列值过滤数据,我们可以基于==,!=,...

等运算符创建掩码

答案 1 :(得分:0)

您可以使用pandas groupby

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'])