2015-06-16 53 views
1

我有一個Pandas數據框,其中有幾列組成一個唯一標識符。我想寫一個通用測試用例,允許我將這些列連接在一起成爲一個列(uid)並測試該列的唯一性。我有以下代碼作爲非通用測試用例:將系列列表連接到一個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.

回答

1

假設你要選擇列twothree補充:

col_to_add = ['two', 'three'] 

使用sum(axis=1)來連接這些列:

df['uid'] = df[col_to_add].sum(axis=1) 
+0

這並不能解決問題。我希望能夠編寫一個通用的函數,它允許我從'df'中選擇一組任意的列來連接到一個id列,而不僅僅是數據框中的所有列。 –

+0

好的。得到它。建議你應該澄清你的問題,說你想*選擇*列來總結,而不是說你想要任意數量的列。 –

+0

沒問題,對不起,我一開始並不清楚。 –