从中删除行Pandas.数据帧基于条目

2024-04-25 04:00:30 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个pandas.DataFrame

    | Col_A | Col_B | Other_Columns
0   | A0    | B0    | …
1   | A1    | B1    | …
2   | A2    | B2    | …
3   | A3    | B3    | …
…   | …     | …     | …

我一直在尝试保留这个DataFrame的子集:去掉A和{}条目的行(例如,如果在第6行中,A6和{}在{}上的其他任何地方都没有出现,我们想删除这一行)

我不想删除副本。另外,我不想得到唯一值(如果我理解得很好,这类似于将列表转换为集合,对吗?)而是只出现一次的值。在

在这一点上,我得到的是:

^{pr2}$

这不是很有效(数据帧相当大,超过10万行),必须有一个更像Python的策略,包括熊猫的固有特征,对吗? 另外,我也不太确定第一行是否正确:通过堆叠两列,我是否确保对两列的条目执行计数?在

如果您需要更多信息,或者我的文字不清楚,请不要犹豫。在

非常感谢您抽出时间:-)


Tags: columns目的a2dataframepandasa1colb0
1条回答
网友
1楼 · 发布于 2024-04-25 04:00:30

这样的事情怎么样:

In [75]: df = pd.DataFrame(np.random.randint(0,100,size=(10, 3)), columns=list('abc'))

In [76]: df
Out[76]:
    a   b   c
0  37  85  17
1  19   0  11
2  51  20  65
3  59  92  65
4  48  15  91
5  21  50  44
6  61  94  49
7  51   6  88
8  89  72  40
9   5  51  79

In [77]: c = df[['a','b']].stack().value_counts()

In [78]: c
Out[78]:
51    3
94    1
15    1
37    1
6     1
72    1
50    1
21    1
5     1
48    1
61    1
19    1
20    1
85    1
89    1
59    1
92    1
0     1
dtype: int64

In [79]: c[c>1]
Out[79]:
51    3
dtype: int64

In [80]: vals = c[c>1].index

In [81]: df[(df['a'].isin(vals)) | (df['b'].isin(vals))]
Out[81]:
    a   b   c
2  51  20  65
7  51   6  88
9   5  51  79

更新:

当你做if (df.at[i,'Col_A'] and df.at[i, 'Col_B']) in myList:检查时,你检查的不是很正确。。。在

以下是正在发生的事情:

^{pr2}$

所以你不能这样检查

相关问题 更多 >