将系列列表连接成一个 uid
Concatenate a list of series into a uid
我有一个 Pandas 数据框,其中有几列共同构成了一个唯一标识符。我想编写一个通用测试用例,允许我将这些列连接成一个列 (uid
) 并测试该列的唯一性。我有以下代码作为非通用测试用例:
import pandas as pd
import pytest
df = pd.DataFrame(columns=['one', 'two', 'three'])
df.one = 'abc', 'def', 'ghi'
df.two = 'jkl', 'mno', 'pqr'
df.three = 'stu', 'vwx', 'yzz'
# Test one
df['uid'] = df.one + df.two
assert len(df.index) == len(df.drop_duplicates(['uid']).index)
# Test two
df['uid'] = df.one + df.three
assert len(df.index) == len(df.drop_duplicates(['uid']).index)
因为我将重复使用它,所以我需要一个允许选择任意列连接在一起的解决方案,例如第 8 行和第 11 行。
假设您要在 select 列 two
和 three
中添加:
col_to_add = ['two', 'three']
使用 sum(axis=1)
连接这些列:
df['uid'] = df[col_to_add].sum(axis=1)
我有一个 Pandas 数据框,其中有几列共同构成了一个唯一标识符。我想编写一个通用测试用例,允许我将这些列连接成一个列 (uid
) 并测试该列的唯一性。我有以下代码作为非通用测试用例:
import pandas as pd
import pytest
df = pd.DataFrame(columns=['one', 'two', 'three'])
df.one = 'abc', 'def', 'ghi'
df.two = 'jkl', 'mno', 'pqr'
df.three = 'stu', 'vwx', 'yzz'
# Test one
df['uid'] = df.one + df.two
assert len(df.index) == len(df.drop_duplicates(['uid']).index)
# Test two
df['uid'] = df.one + df.three
assert len(df.index) == len(df.drop_duplicates(['uid']).index)
因为我将重复使用它,所以我需要一个允许选择任意列连接在一起的解决方案,例如第 8 行和第 11 行。
假设您要在 select 列 two
和 three
中添加:
col_to_add = ['two', 'three']
使用 sum(axis=1)
连接这些列:
df['uid'] = df[col_to_add].sum(axis=1)