Pandas -查找具有特定值的所有行,并保留具有匹配列值的所有行

ulydmbyx  于 2023-01-07  发布在  其他
关注(0)|答案(3)|浏览(144)

我有一个包含两列(日期和名称)的数据框。我想搜索一个特定的名称,并获得该名称出现的不同日期。然后,我只想保留包含这些日期的行。这是我的数据:
| 会议日期|姓名|
| - ------| - ------|
| 一七四六年六月二日|国王(#p32)|
| 一七四六年六月二日|莫佩屠斯(#p4)|
| 一七四六年六月二日|约旦(#p31)|
| 一七四六年六月九日|莫佩屠斯(#p4)|
| 一七四六年六月九日|伏尔泰(#p37)|
| 一七四六年六月九日|德拉康达明(#p38)|
| 一七四六年六月九日|Sässmilch(编号p16)|
| 一七四六年六月九日|国王(#p32)|
| 一七四六年六月九日|福美(#p27)|
| 一七四六年六月十六日|Margraf(编号p20)|
| 一七四六年六月二十三日|多纳(#p39)|
| 一七四六年六月二十三日|欧拉(#p10)|
我使用了以下代码来查找我的名字的所有匹配项:

df["Name"].value_counts()["Sa Majesté (#p32)"]

我知道用什么来存储相应的日期,但我不确定如何存储。一旦我有了这些日期,我计划存储这些值,并过滤我的原始 Dataframe ,只保留那些具有这些日期的行。
我真的很感激任何帮助/指点。

uklbhaso

uklbhaso1#

IIUC,这就是你要找的吗?一个取名字并返回过滤数据集的函数?

def find_name(name):
    return df.loc[df['Name'].eq(name)]
find_name('Sa Majesté (#p32)')


x一个一个一个一个x一个一个二个x

如果你只需要一张日期表
一个三个三个一个

hjzp0vay

hjzp0vay2#

您可以筛选字符串值,然后获取Meeting Dates列的唯一值。

>>> df[df['Name'].eq("Sa Majesté (#p32)")]['Meeting Dates'].unique()

array(['1746-06-02', '1746-06-09'], dtype=object)

如果你想对所有的名字都这样做,那么你可以使用groupby并得到唯一的日期:

>>> df.groupby('Name')['Meeting Dates'].agg('unique')

Name
Dohna (#p39)                          [1746-06-23]
Euler (#p10)                          [1746-06-23]
Formey (#p27)                         [1746-06-09]
Jordan (#p31)                         [1746-06-02]
Marggraf (#p20)                       [1746-06-16]
Maupertuis (#p4)          [1746-06-02, 1746-06-09]
Sa Majesté (#p32)        [1746-06-02, 1746-06-09]
Süssmilch (#p16)                     [1746-06-09]
Voltaire (#p37)                       [1746-06-09]
de la Condamine (#p38)                [1746-06-09]
Name: Meeting Dates, dtype: object
izkcnapc

izkcnapc3#

我提供的解决方案不是基于你的特定数据集,但是对你的问题是有效的。我希望你能看到逻辑并在你自己的用例中实现。
| 身份证|姓名|
| - ------|- ------|
| 1个|......|
| 第二章|......|
| 三个|......|
根据这个通用数据集,我们试图找到columns name "name"..下具有certain value的所有rows,然后我们获取这些行的id,然后找到具有这些值的所有行。

import pandas as pd

df = pd.read_csv("MOCK_DATA.csv")

# FIND ALL ROWS THAT THE SECOND COLUMNS HAS NAME "Two-toed tree sloth"
tempOne = df[(df == "Two-toed tree sloth").any(axis=1)]

# SUM UP ALL OF THE ID'S THAT THIS IS TRUE
tempTwo = df[(df == "Two-toed tree sloth").any(axis=1)]["id"].to_list()

# OUTPUT ALL ROWS WITH THESE LIST ITEMS
df.loc[df["id"].isin(tempTwo)]

相关问题