假设我有一个像这样的 Pandas DataFrame:
df = pd.DataFrame({'Name': ['John Doe', 'Jane Smith', 'John Doe', 'Jane Smith','Jack Dawson','John Doe']})
df:
Name
0 John Doe
1 Jane Smith
2 John Doe
3 Jane Smith
4 Jack Dawson
5 John Doe
Run Code Online (Sandbox Code Playgroud)
如果名称相同,我想添加一个带有相同 uuid 的列。例如,上面的 DataFrame 应该变成:
df:
Name UUID
0 John Doe 6d07cb5f-7faa-4893-9bad-d85d3c192f52
1 Jane Smith a709bd1a-5f98-4d29-81a8-09de6e675b56
2 John Doe 6d07cb5f-7faa-4893-9bad-d85d3c192f52
3 Jane Smith a709bd1a-5f98-4d29-81a8-09de6e675b56
4 Jack Dawson 6a495c95-dd68-4a7c-8109-43c2e32d5d42
5 John Doe 6d07cb5f-7faa-4893-9bad-d85d3c192f52
Run Code Online (Sandbox Code Playgroud)
uuid 应该从 uuid.uuid4() 函数生成。
我目前的想法是使用 groupby("Name").cumcount() 来识别哪些行具有相同的名称,哪些不同。然后我会用 cumcount 的键和 uuid 的值创建一个字典,并使用它来将 uuid …
我有一个像这样的简单数据框:
df = pd.DataFrame({'Name': ['John Doe', 'Jane Smith', 'John Doe', 'Jane Smith','Jack Dawson','John Doe']})
df:
Name
0 John Doe
1 Jane Smith
2 John Doe
3 Jane Smith
4 Jack Dawson
5 John Doe
Run Code Online (Sandbox Code Playgroud)
我想添加一列 ['foreign_key'] 为每个唯一名称分配一个唯一 ID(但具有相同名称的行应该具有相同的 'foreign_key'。因此最终输出如下所示:
df:
Name Foreign_Key
0 John Doe foreignkey1
1 Jane Smith foreignkey2
2 John Doe foreignkey1
3 Jane Smith foreignkey2
4 Jack Dawson foreignkey3
5 John Doe foreignkey1
Run Code Online (Sandbox Code Playgroud)
我正在尝试将groupby与应用的自定义函数一起使用。所以我的第一步是:
name_groupby = df.groupby('Name')
Run Code Online (Sandbox Code Playgroud)
这就是拆分,接下来是应用和组合。文档中似乎没有像这个例子这样的任何内容,我不确定从这里去哪里。
我开始应用的自定义函数如下所示:
def make_foreign_key(groupby_df):
return groupby_df['Foreign_Key'] = 'foreign_key' …Run Code Online (Sandbox Code Playgroud) 假设我有一个包含如下名称的 Pandas DataFrame:
name_df = pd.DataFrame({'name':['Jack Fine','Kim Q. Danger','Jane Smith', 'Juan de la Cruz']})
name
0 Jack Fine
1 Kim Q. Danger
2 Jane Smith
3 Juan de la Cruz
Run Code Online (Sandbox Code Playgroud)
我想分裂name柱成first_name和last_name是否有在名称中有一个空格。否则,我希望将全名推入first_name.
所以最终的 DataFrame 应该是这样的:
first_name last_name
0 Jack Fine
1 Kim Q. Danger
2 Jane Smith
3 Juan de la Cruz
Run Code Online (Sandbox Code Playgroud)
我试图通过首先应用以下函数来返回可以拆分为名字和姓氏的名称来实现此目的:
def validate_single_space_name(name: str) -> str:
pattern = re.compile(r'^.*( ){1}.*$')
match_obj = re.match(pattern, name)
if match_obj:
return name
else:
return None …Run Code Online (Sandbox Code Playgroud)