【问题标题】:Python Pandas dataframe is not including all duplicatesPython Pandas 数据框不包括所有重复项
【发布时间】:2016-02-04 08:29:53
【问题描述】:

我基本上是在尝试创建一个 Pandas 数据框 (CQUAD_mech_loads),它是更大数据框 (CQUAD_Mech) 的子集。该子集数据帧本质上是通过基于两个条件的过滤创建的。较大的数据框 (CQUAD_Mech) 中有 NO 重复项。

问题是我的子集数据框不包含 ELM 列中的重复 ID。但是,它确实在 LC 列中包含重复项。

CQUAD_ELM 是一个包含四个 ID ([387522, 387522, 387506, 387507]) 的列表。我有 387522 的重复 ID。现在,CQUAD_mech_loads 是一个数据框,其中三个唯一 ID 只有三行。我也想要第四个重复的 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 的另一行在哪里?):

       LC     ELM        FX         FY        FXY       
0    3113  387506         0          0          0       
1    3113  387507         0          0          0       
2    3113  387522         0          0          0  

【问题讨论】:

  • 你不想df[(df[col1].isin(cond1)) & (df[col2].isin(cond2))].reset_index(drop=True)吗?
  • cond1 从来都不是一个列表,所以我之前没有使用过isin。无论如何,我尝试在两种情况下都使用isin,但我仍然得到相同的结果。

标签: python pandas duplicates dataframe


【解决方案1】:

由于您无论如何都要删除索引,因此您只需将索引设置为您感兴趣的列并使用.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

【讨论】:

  • 嗯,我不确定这如何回答我的问题。我可以看到您正在使用 ix 更改某些行的值,但我看不出这对我有什么帮助。
  • 它没有改变任何值;它正在选择它们。刚好又选了5。秒见编辑。
猜你喜欢
  • 2021-10-04
  • 2018-08-11
  • 2022-01-18
  • 2021-10-15
  • 2019-09-09
  • 2019-12-11
  • 1970-01-01
  • 2020-04-10
  • 2016-10-10
相关资源
最近更新 更多