Python数据帧不包括所有重复项
我基本上是在尝试创建一个熊猫数据帧(Python数据帧不包括所有重复项,python,pandas,duplicates,dataframe,Python,Pandas,Duplicates,Dataframe,我基本上是在尝试创建一个熊猫数据帧(CQUAD\u mech\u loads),它是一个更大的数据帧(CQUAD\u mech)的子集。该子集数据帧基本上是通过基于两个条件的过滤创建的。在较大的数据帧(CQUAD\u Mech)中没有重复项 问题是我的子集数据帧在ELM列中没有包含重复的ID。但是,它在LC列中包含重复项 CQUAD\u ELM是一个包含四个ID的列表([387523875222387506387507])。我有重复的ID387522。现在,CQUAD\u mech\u load
CQUAD\u mech\u loads
),它是一个更大的数据帧(CQUAD\u mech
)的子集。该子集数据帧基本上是通过基于两个条件的过滤创建的。在较大的数据帧(CQUAD\u Mech
)中没有重复项
问题是我的子集数据帧在ELM
列中没有包含重复的ID。但是,它在LC
列中包含重复项
CQUAD\u ELM
是一个包含四个ID的列表([387523875222387506387507]
)。我有重复的ID387522
。现在,CQUAD\u mech\u loads
是一个数据帧,三个唯一ID只有三行。我还想要第四个重复的身份证
守则:
def get_df(df, col1, cond1, col2='', cond2=0):
return df[(df[col1] == cond1) & (df[col2].isin(cond2))].reset_index(drop=True)
CQUAD_mech_loads = get_df(CQUAD_Mech,'LC', LC, 'ELM', CQUAD_ELM)
输出(其中是387522
?)的另一行):
由于您仍要删除索引,因此只需将索引设置为您感兴趣的列,并使用
.ix
索引:
In [28]: df = pd.DataFrame(np.arange(25).reshape(5,5))
In [29]: df
Out[29]:
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19
4 20 21 22 23 24
In [30]: df.set_index(4, drop=False).ix[[4,4,19,4,24]].reset_index(drop=True)
Out[30]:
0 1 2 3 4
0 0 1 2 3 4
1 0 1 2 3 4
2 15 16 17 18 19
3 0 1 2 3 4
4 20 21 22 23 24
编辑:当前方法只查找每个不同的col1/col2对。如果要对多个列进行筛选,只需执行两次,每列一次:
In [98]: df.set_index(1, drop=False).ix[[1, 6, 16]].set_index(4, drop=False).ix[[4,4,4,4,4,4,4,4,19,9]].reset_index(drop=True)
Out[98]:
0 1 2 3 4
0 0 1 2 3 4
1 0 1 2 3 4
2 0 1 2 3 4
3 0 1 2 3 4
4 0 1 2 3 4
5 0 1 2 3 4
6 0 1 2 3 4
7 0 1 2 3 4
8 15 16 17 18 19
9 5 6 7 8 9
你不想要
df[(df[col1].isin(cond1))&(df[col2].isin(cond2))]重置索引(drop=True)
?cond1
从来都不是一个列表,所以我以前没有使用isin
。在任何情况下,我尝试对这两种情况使用isin
,但仍然得到相同的结果。嗯,我不确定这是如何回答我的问题的。我可以看到您正在使用ix
更改某些行的值,但我看不出这对我有什么帮助;它正在选择它们。我只是碰巧又选了5个。请参阅稍后编辑。
In [98]: df.set_index(1, drop=False).ix[[1, 6, 16]].set_index(4, drop=False).ix[[4,4,4,4,4,4,4,4,19,9]].reset_index(drop=True)
Out[98]:
0 1 2 3 4
0 0 1 2 3 4
1 0 1 2 3 4
2 0 1 2 3 4
3 0 1 2 3 4
4 0 1 2 3 4
5 0 1 2 3 4
6 0 1 2 3 4
7 0 1 2 3 4
8 15 16 17 18 19
9 5 6 7 8 9