微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python - 根据条件复制 Pandas Dataframe 中的行

如何解决Python - 根据条件复制 Pandas Dataframe 中的行

我有一个 Pandas DataFrame,我需要根据某些列中给定值列表的存在在其上复制一些行。如果一行在指定的列中包含这些值之一,那么我需要复制该行。

df = pd.DataFrame({"User": [1,2],"col_01": ["C","A"],"col_02": ["A","C"],"col_03": ["B","B"],"Block": ["01","03"]})

    User col_01 col_02 col_03 Block
0     1      C      A      B    01
1     2      A      C      B    03

values = ["C","D"]
columns = ["col_01","col_02","col_03"]
rep_times = 3

鉴于这两个值和列列表,在名为“col_01”、“col_02”或“col_03”的列中包含“C”或“D”的每一行都必须重复 rep_times 次,因此输出表必须是这样的:

    User col_01 col_02 col_03 Block
0     1      C      A      B    01
1     1      C      A      B    01
2     1      C      A      B    01
3     2      A      A      B    03

我尝试了以下类似的方法,但它不起作用,我不知道如何创建这个决赛桌。首选方式是完成工作的单行操作。

df2 = pd.DataFrame((pd.concat([row] * rep_times,axis=0,ignore_index=True)
if any(x in values for x in list(row[columns])) else row for index,row in df.iterrows()),columns=df.columns)

解决方法

import pandas as pd

首先使用 isin() 方法创建一个布尔掩码来检查您的条件:

mask=df[columns].isin(values).any(1)

最后使用 reindex() 方法,重复那些行 rep_timesappend() 方法将不满足条件的行追加回数据帧:

df=df.reindex(df[mask].index.repeat(rep_times)).append(df[~mask])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。