【问题标题】:pandas: groupby two columns and return diff for string column熊猫:按两列分组并返回字符串列的差异
【发布时间】:2021-01-13 21:04:09
【问题描述】:

我有一个如下所示的数据框:

import pandas as pd

data = {'First':  ['First value','Third value','Second value','First value','Third value','Second value','Third value','Second value','First value','Third value'],

'Second': ['A','B','A','A','C','B','C','B','B','D']}

 df = pd.DataFrame (data, columns = ['First','Second'])

我想将这两列分组,并在单独的列中返回第一列中每个值缺少的对应值。例如,第一列中的“第一个值”没有第二列中的 B、C 值,依此类推。

想要的输出:

First         unmatched value
First value   D,C
Second value  C,D
Third value   A

我试过了:

df.groupby('First')['Second'].diff()

但它不适用于字符串并返回错误

【问题讨论】:

  • 模式和所需的输出对我来说没有意义。
  • 我正在寻找一种方法,该方法将返回第一列中每个值缺少的相应标签。这有意义吗?
  • "返回每个值缺少的对应标签" 那你的输出错了吗?为什么“第一个值”缺少“B”,为什么“第一个值”没有缺少“D”?

标签: python-3.x pandas string diff


【解决方案1】:

使用set:

all_values = set(df["Second"])
#{'C', 'D', 'B', 'A'}

f = lambda x: all_values - set(x)

df.groupby("First")["Second"].apply(f)
#First
#First value     {C, D}
#Second value    {C, D}
#Third value        {A}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多