【问题标题】:filter data based on conditions of another list根据另一个列表的条件过滤数据
【发布时间】:2022-12-22 03:51:48
【问题描述】:

我有一个名字列表。

name= ["John Lewis","Michael Armstrong","Kurt Abela","Brian Watson","Gregory Dubois"]

我有另一个名为 df 的数据框

df={'Name':['Karan Singh,John Lewis','Michael Armstrong, Fabian Schreiber','Roy Dalhuisen','Arya Yildirim,Gregory Dubois'],'ID':[23,22,21,24]}

现在我想过滤df,只有在dataframe name 中出现的名字在过滤后也出现在df 中。

我试过这个,但没有用:

df = df[~df.index.isin(name.index)

【问题讨论】:

  • name.index 是一个函数,而不是一个列表。
  • 澄清一下:变量 df 是字典还是 pandas.DataFrame()?
  • @Jan 我认为这是他转换为数据框的字典。

标签: python pandas


【解决方案1】:

你可以这样使用:filtered_df = df[df['Name'].isin(name)]

【讨论】:

  • df['Name'] 是逗号分隔的字符串而不是单个名称时,这是否有效?
【解决方案2】:

你可以像这样使用应用

import pandas as pd
name= ["John Lewis","Michael Armstrong","Kurt Abela","Brian Watson","Gregory Dubois"]
df={'Name':['Karan Singh,John Lewis','Michael Armstrong, Fabian Schreiber','Roy Dalhuisen','Arya Yildirim,Gregory Dubois',"hh,bb"],'ID':[23,22,21,24,28]}
#df to pandas
df = pd.DataFrame(df)
print(df)

def filter_names(row):
    names = row.split(',')
    return any(name in names for name in name)

df_filtered = df[df['Name'].apply(filter_names)]
print(df_filtered)

结果

                                  Name  ID
0               Karan Singh,John Lewis  23
1  Michael Armstrong, Fabian Schreiber  22
2                        Roy Dalhuisen  21
3         Arya Yildirim,Gregory Dubois  24
4                                hh,bb  28

                                  Name  ID
0               Karan Singh,John Lewis  23
1  Michael Armstrong, Fabian Schreiber  22
3         Arya Yildirim,Gregory Dubois  24

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多