【问题标题】:How to select and subset rows based on sting in pandas dataframe?如何根据熊猫数据框中的字符串选择和子集行?
【发布时间】:2019-09-22 12:31:37
【问题描述】:

我的数据集如下所示。我正在尝试对我的 pandas 数据框进行子集化,以便仅选择所有 3 个人的响应。例如,在下面的数据框中,所有 3 个人的回答都是“我喜欢吃”和“你有美好的一天”。因此,只有那些应该被子集化。我不确定如何在Pandas 数据框中实现这一点。

注意:我是 Python 新手,请用你的代码解释一下。

数据帧示例

import pandas as pd
data = {'Person':['1', '1','1','2','2','2','2','3','3'],'Response':['I like to eat','You have nice day','My name is ','I like to eat','You have nice day','My name is','This is it','I like to eat','You have nice day'],
      }
df = pd.DataFrame(data)
print (df)

输出:

  Person           Response
0      1      I like to eat
1      1  You have nice day
2      1        My name is 
3      2      I like to eat
4      2  You have nice day
5      2         My name is
6      2         This is it
7      3      I like to eat
8      3  You have nice day

【问题讨论】:

    标签: python-3.x string pandas dataframe text


    【解决方案1】:

    IIUC 我正在使用transformnunique

    yourdf=df[df.groupby('Response').Person.transform('nunique')==df.Person.nunique()]
    yourdf
    Out[463]: 
      Person           Response
    0      1      I like to eat
    1      1  You have nice day
    3      2      I like to eat
    4      2  You have nice day
    7      3      I like to eat
    8      3  You have nice day
    

    方法二

    df.groupby('Response').filter(lambda x : pd.Series(df['Person'].unique()).isin(x['Person']).all())
    Out[467]: 
      Person           Response
    0      1      I like to eat
    1      1  You have nice day
    3      2      I like to eat
    4      2  You have nice day
    7      3      I like to eat
    8      3  You have nice day
    

    【讨论】:

    • 另一个问题。如何从另一个数据集中对相同的响应进行子集化?假设我在该数据集中没有 Person 列。我只有“响应”列
    • @biggboss2019 使用 isin,如 df2.loc[df2.response.isin(yourdf.response)]
    • 谢谢,知道isin()函数很有用
    猜你喜欢
    • 2018-04-26
    • 2021-10-07
    • 2017-03-12
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多