查找组中最后一条满足一定条件的记录,并根据python中的记录类型创建新列



我正在尝试创建一个新的列'newtype'基于以下规则:

  1. 查找'id'中'skill' = 'bill'的最后一条记录
  2. 然后创建新列:在上面步骤中找到的技能的"类型"是整个组的新类型。

例如,输入数据:

df = pd.DataFrame({"id": [1, 1, 1, 2,2,3,3,3,4],
"skill": ['cc', 'bill', 'cc', 'cc','bill','a','bill','bill','bill'],
"type": ['a', 'a', 'b', 'b','a','a','a','b','a']})
df

我想要的结果:

df = pd.DataFrame(
{"id": [1, 1, 1, 2,2,3,3,3,4],
"skill": ['cc', 'bill', 'cc', 'cc','bill','a','bill','bill','bill'],
"type": ['a', 'a', 'b', 'b','a','a','a','b','a'],
"newtype": ['a', 'a', 'a', 'a','a','b','b','b','a']})
df

谁能告诉我如何达到上述结果?谢谢你! !

假设您所指的'group'由具有相同'id'值的行组成,这是一个解决方案:

import pandas as pd
df = pd.DataFrame({"id": [1, 1, 1, 2,2,3,3,3,4],
"skill": ['cc', 'bill', 'cc', 'cc','bill','a','bill','bill','bill'],
"type": ['a', 'a', 'b', 'b','a','a','a','b','a']})
def get_type(row):
df_temp = df[df['id'] == row['id'] ]
return df_temp[df_temp['skill'].str.contains('bill')].iloc[-1]['type']

df['newtype'] = df.apply(lambda row:get_type(row), axis=1)

输出:

|    |   id | skill   | type   | newtype   |
|---:|-----:|:--------|:-------|:----------|
|  0 |    1 | cc      | a      | a         |
|  1 |    1 | bill    | a      | a         |
|  2 |    1 | cc      | b      | a         |
|  3 |    2 | cc      | b      | a         |
|  4 |    2 | bill    | a      | a         |
|  5 |    3 | a       | a      | b         |
|  6 |    3 | bill    | a      | b         |
|  7 |    3 | bill    | b      | b         |
|  8 |    4 | bill    | a      | a         |

通过df。Apply将每行传递给一个函数,该函数过滤df中具有相同id(属于同一组)的行,然后查找该组中'bill'技能的最后匹配的'type'值并返回该值以填充'newtype'。

相关内容

  • 没有找到相关文章

最新更新