繁体   English   中英

如何将字符移动到 pandas dataframe 中同一行的另一列

[英]How to move a character to another column in the same row in a pandas dataframe

我在试图清理类似于这个的 dataframe 时遇到了困难:

代码 课程名 EOS 测试
AA101 课程 1 350 420
AA102 课程 2 400 470
AB101 课程 3 #560 570
AB102 课程 4 410 465
AC101 课程 5 # 522

我只需要在EOS列中保留数值,并将其中出现的#字符移动到列test ,以表明该课程需要额外的测试。 这是因为有些值在实际数字之前有一个# ,例如Course 3 ,而有些值只有#作为值,例如Course 5

dataframe 是使用 Camelot 创建的,用于从 PDF 表中提取这些值。

我需要的是将此#从该列中取出并将其添加到test列中。

有没有简单的方法可以做到这一点?

没有内置的 function 可以做到这一点,但可以使用两行来完成:

df.loc[df['EOS'].str.contains('#').fillna(False), 'test'] = '#'
df['EOS'] = df['EOS'].str.replace('#', '')

Output:

>>> df
    code  course name  EOS  Mid test
0  AA101     Course 1  350  420  NaN
1  AA102     Course 2  400  470  NaN
2  AB101     Course 3  560  570    #
3  AB102     Course 4  410  465  NaN
4  AC101     Course 5       522    

你可以这样做

data = pd.DataFrame(
    [  ["AA101", "Course 1", "350",  420,   None],
       ["AA102", "Course 2", "400",  470,   None],
       ["AB101", "Course 3", "#560", 570,   None],
       ["AB102", "Course 4", "410",  465,   None],
       ["AC101", "Course 5", "#",    522,   None]  ],
    columns = ["code", "course name", "EOS", "Mid", "test"]
)

transformed_data = (
    data
    .assign(test=lambda d: d["EOS"].apply(lambda d_: "#" if "#" in d_ else None))
    .assign(EOS=lambda d: d["EOS"].replace({"#": ""}, regex=True))
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM