我有一个数据框,我想在其中确定参加我的“大年”的每个人看到了多少种独特的鸟类。
我尝试使用列表理解和 for 循环来迭代每一行,并使用 .is_unique() 确定它是否是唯一的,但这似乎是我大部分痛苦的根源。我可以使用 .unique() 获得所有独特物种的列表,这非常好,但我想以某种方式获得与这些鸟类相关的人。
df = pd.DataFrame({'Species':['woodpecker', 'woodpecker', 'dove', 'mockingbird'], 'Birder':['Steve', 'Ben','Ben','Greg']})
ben_unique_bird = [x for x in range(len(df['Species'])) if df['Birder'][x]=='Ben' and df['Species'][x].is_unique()]
编辑:我想我对此不清楚 - 我想获得一份每个人都看到但其他人没有看到的鸟类列表。因此,无论格式如何,输出都会类似于 (Steve, 0)、(Ben, 1)、(Greg, 1)。
谢谢!
最佳答案
这可以通过列表理解很容易地完成。
df = pd.DataFrame({'Species':['woodpecker', 'woodpecker', 'dove', 'mockingbird'], 'Birder':['Steve', 'Ben','Ben','Greg']})
matches = [(row[1], row[2]) for row in df.itertuples() if (row[1],row[2]) not in matches]
这给出了一个元组列表作为输出:
[('Steve', 'woodpecker'), ('Ben', 'woodpecker'), ('Ben', 'dove'), ('Greg', 'mockingbird')]
关于python - 有条件地从 pandas 数据框中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52865685/