[英]Setting a column value based on another column in a pandas dataframe
我有一个主要填充与程序输入字段相关的文本数据的数据框,用于跟踪测试结果。 我的一列跟踪程序中的屏幕位置,我想在对输入字段进行排序时保持屏幕的顺序。 我意识到我可以通过为我的屏幕设置一个类别来做到这一点,但我担心从测试计划中导入拼写错误,所以我想在一个单独的列中为我的每个屏幕设置一个数值,并将其用于我的排序。
现在我的数据是这样的:
Screen Order Screen Input Field Result
Screen A .... ....
Screen A .... ....
Screen B .... ....
Screen C .... ....
Screen D .... ....
Screen D .... ....
Screen E .... ....
我试图让它看起来像这样,尽管屏幕可能出现故障:
Screen Order Screen Input Field Result
1 Screen A .... ....
1 Screen A .... ....
2 Screen B .... ....
3 Screen C .... ....
4 Screen D .... ....
4 Screen D .... ....
5 Screen E .... ....
我已经搜索了几个小时,但没有任何东西可以工作,尽管我觉得这应该很简单。 我认为该解决方案将使用字典和 applymap() 函数,但我一直无法找到任何关于如何使解决方案在新列上工作的好的文档,只有当我要更改现有值时在我的屏幕列中。
如果这是重复的,我深表歉意,但我一直在寻找,但尚未找到任何解决方案。
EDIT1:它是不同的,你需要字典进行转换。
dic = {'Screen A': 1, 'Screen B': 2, 'Screen C': 3,'Screen D': 4,'Screen E': 5}
print df
Screen
0 Screen A
1 Screen A
2 Screen B
3 Screen C
4 Screen D
5 Screen D
6 Screen E
df['Screen Order'] = df['Screen'].apply(lambda x: dic[x])
#reordering
df = df[['Screen Order', 'Screen' ]]
print df
Screen Order Screen
0 1 Screen A
1 1 Screen A
2 2 Screen B
3 3 Screen C
4 4 Screen D
5 4 Screen D
6 5 Screen E
我将最后一个字符转换为数字。 有关转换的更多信息在这里。
print df
Screen
0 Screen A
1 Screen A
2 Screen B
3 Screen C
4 Screen D
5 Screen D
6 Screen E
#convert each last letter from column screen to number
# https://stackoverflow.com/a/4528997/2901002
df['Screen Order'] = df['Screen'].apply(lambda x: ord(x[-1].lower()) - 96)
#reordering columns
df = df[['Screen Order', 'Screen' ]]
print df
Screen Order Screen
0 1 Screen A
1 1 Screen A
2 2 Screen B
3 3 Screen C
4 4 Screen D
5 4 Screen D
6 5 Screen E
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.