![](/img/trans.png)
[英]How to select a particular column value from a pandas dataframe when another column in the same row is NaN?
[英]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.