Python 基于列1中的不同值获取行,同时尽可能多地保留列2中的不同值

Python 基于列1中的不同值获取行,同时尽可能多地保留列2中的不同值,python,pandas,Python,Pandas,我有一个处理列和控制列的匹配数据集。我的问题是为每个治疗观察选择一个对照组,基本上是一对一的替换对照组,除了我想保留尽可能多的独特对照组,即,我想利用对照组的全部信息,不想对单个对照观察给予太多的重视 对于一个特定的示例,在匹配之后,我在下面的dataframe中,处理列和控制列中都有重复的值: >>>df treated control A a A b B a B b C a C b D a D d 我希望根据treated中

我有一个处理列和控制列的匹配数据集。我的问题是为每个治疗观察选择一个对照组,基本上是一对一的替换对照组,除了我想保留尽可能多的独特对照组,即,我想利用对照组的全部信息,不想对单个对照观察给予太多的重视

对于一个特定的示例,在匹配之后,我在下面的dataframe中,处理列和控制列中都有重复的值:

>>>df
treated control
A    a
A    b
B    a
B    b
C    a
C    b
D    a
D    d
我希望根据treated中的唯一值获取行,同时从控件中保留尽可能多的唯一值。也就是说,我想买两种

>>>df
treated control
A    a
B    b
C    a
D    d

或在本例中保持控件列所有唯一值的任何输出(并保持正确的对)。也就是说,比如说,我不想

>>>df
treated control
A    a
B    a
C    a
D    a
非常感谢您的帮助。

试试++:

new_df

  col1 col2
0    A    a
1    B    b
2    C    b

df=df.apply(pd.unique)
?我的问题是,如果col1和col2中的值长度不匹配,会发生什么?就像col1中的
'A''B''C'
和col2中的
'A''B'
。@AnuragDabas,谢谢,它似乎适用于“方形”数据帧,否则它会抛出一个错误“数组的长度必须相同”。我不确定pd.unique在df.apply中是如何工作的。@HenryEcker,请查看我的编辑。谢谢谢谢,亨利。答案的问题是,我仍然需要col1和col2之间的原始成对值,这可能会在转换中丢失。我对这个问题做了一些修改,以澄清它的应用。
import pandas as pd

df = pd.DataFrame({
    'col1': {0: 'A', 1: 'A', 2: 'B', 3: 'B', 4: 'C', 5: 'C'},
    'col2': {0: 'a', 1: 'b', 2: 'a', 3: 'b', 4: 'a', 5: 'b'}
})

new_df = (
    df.apply(lambda x: pd.Series(pd.unique(x)))
        .ffill()  # fill NaNs with any value
)

print(new_df)
  col1 col2
0    A    a
1    B    b
2    C    b