根据列中的重复值有条件地复制数据

我希望根据现有的金融交易数据框创建一个新的数据框,但前提是特定列中有重复值。

为简单起见,我有df13 列:'a' 'b' 'c'和数百行。b当列中的值重复 3 次或更多次时,我想复制所有行。换句话说,如果 3 行或更多行具有相同的b值,我希望将那些复制到df2.

我试过了

df2 = df1.where(df1.b.value_counts() > 2)

但这会将所有行变为NaN. 我希望指出正确的方向,而不是继续猜测和检查其他代码。


慕尼黑8549860
浏览 97回答 2
2回答

PIPIONE

groupy()与_np.where()考虑这个样本:>>> df = pd.DataFrame({'id':[1,2,3,4,5], 'tag': ['a','a','a','d','e']})>>> df   id tag0   1   a1   2   a2   3   a3   4   d4   5   e>>> df['counter'] = df.groupby(['tag'])['tag'].transform('count')>>> df   id tag  counter0   1   a        31   2   a        32   3   a        33   4   d        14   5   e        1>>> df['counter'] = np.where(df['counter'] > 2, ['Retain'], ['Remove'])>>> df   id tag counter0   1   a  Retain1   2   a  Retain2   3   a  Retain3   4   d  Remove4   5   e  Remove>>> df = df[df['counter'].isin(['Retain'])]>>> df   id tag counter0   1   a  Retain1   2   a  Retain2   3   a  Retain

蛊毒传说

添加一列标记要保留的值,然后按此过滤:# Make a boolean series as a mapping of values with more than 2 countsmore_than_2_values = df1.b.value_counts() > 2# Add a new column that indicates which values should be keptdf1["more_than_2"] = df["b"].map(more_than_2_values).fillna(False)# Filter the data, drop the label column if desireddesired_result = df1[df1["more_than_2"].drop(columns="more_than_2"]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python