为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑8549860 2022-06-28 18:10:20
我希望根据现有的金融交易数据框创建一个新的数据框,但前提是特定列中有重复值。为简单起见,我有df13 列:'a' 'b' 'c'和数百行。b当列中的值重复 3 次或更多次时,我想复制所有行。换句话说,如果 3 行或更多行具有相同的b值,我希望将那些复制到df2.我试过了df2 = df1.where(df1.b.value_counts() > 2)但这会将所有行变为NaN. 我希望指出正确的方向,而不是继续猜测和检查其他代码。
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

groupy()与_np.where()


考虑这个样本:


>>> df = pd.DataFrame({'id':[1,2,3,4,5], 'tag': ['a','a','a','d','e']})

>>> df

   id tag

0   1   a

1   2   a

2   3   a

3   4   d

4   5   e


>>> df['counter'] = df.groupby(['tag'])['tag'].transform('count')

>>> df

   id tag  counter

0   1   a        3

1   2   a        3

2   3   a        3

3   4   d        1

4   5   e        1


>>> df['counter'] = np.where(df['counter'] > 2, ['Retain'], ['Remove'])

>>> df

   id tag counter

0   1   a  Retain

1   2   a  Retain

2   3   a  Retain

3   4   d  Remove

4   5   e  Remove


>>> df = df[df['counter'].isin(['Retain'])]

>>> df

   id tag counter

0   1   a  Retain

1   2   a  Retain

2   3   a  Retain


查看完整回答
反对 回复 2022-06-28
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

添加一列标记要保留的值,然后按此过滤:


# Make a boolean series as a mapping of values with more than 2 counts

more_than_2_values = df1.b.value_counts() > 2

# Add a new column that indicates which values should be kept

df1["more_than_2"] = df["b"].map(more_than_2_values).fillna(False)

# Filter the data, drop the label column if desired

desired_result = df1[df1["more_than_2"].drop(columns="more_than_2"]


查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号