Python 基于列1中的不同值获取行,同时尽可能多地保留列2中的不同值
我有一个处理列和控制列的匹配数据集。我的问题是为每个治疗观察选择一个对照组,基本上是一对一的替换对照组,除了我想保留尽可能多的独特对照组,即,我想利用对照组的全部信息,不想对单个对照观察给予太多的重视 对于一个特定的示例,在匹配之后,我在下面的dataframe中,处理列和控制列中都有重复的值: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中
>>>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