Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据帧不包括所有重复项_Python_Pandas_Duplicates_Dataframe - Fatal编程技术网

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]
)。我有重复的ID
387522
。现在,
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