请帮助解释如何做以下工作,我是如此挣扎。
我有一个名为data3的数据集:
我需要把这14位数字分解成这样的逻辑:
type = GCP
,则返回键的前三个字母。type = GTIN
和位置2-6在14位数= 00000,那么返回位置7-9在键.type = gtin
和位置2-6不是00000,那么在键中返回数字2-4 .例子:
- Type -Key
- GTIN -1234589564652344
- GCP -1564546545452344
- GTIN -6000005645324234
如果类型是GCP,我只想要前三个键的数字,如156。如果它是GTIN,并有5个零位在2-6,我想要的位置7-9,这将是564英寸。
如果类型是GTIN,并且在位置2-6中没有5个零,那么我希望返回数字2-4,如上面示例中的234。
发布于 2018-07-26 15:04:14
您可以使用apply
函数执行以下操作:
# create function based on values
def get_values(row):
if row['Type'] == 'GCP':
return row['Key'][:3]
elif row['Type'] == 'GTIN' and row['Key'][1:6] == '00000':
return row['Key'][6:9]
elif row['Type'] == 'GTIN' and row['Key'][2:7] != '00000':
return row['Key'][1:4]
# convert to string
df['Key'] = df['Key'].astype(str)
# now use apply function
df['new'] = df.apply(get_values, axis=1)
Type Key new
0 GTIN 1234589564652344 234
1 GCP 1564546545452344 156
2 GTIN 6000005645324234 564
发布于 2018-07-26 14:43:17
你做了一个很好的工作,把逻辑分解为3个ifs。
现在,将每个if分解成一些小代码。第一个很简单:
if type == "GCP":
return key[:3]
你有什么不能编码的?
发布于 2018-07-26 14:57:42
如果您的数字存储为字符串,那么您可以很容易地在python中拆分。可以使用所需字符的索引拆分字符串。例如,如果您想从字符串中提取前三个字符,则可以这样做。
key[:3]
这将给你所有的东西,但不包括在3个位置的字符。要把角色从中间拉出来,你可以用
key[1:6]
这将给出从1开始到6点的所有数字。(请记住,索引从0开始)
如果您想检查字符串的中间,看看它是否等于某种东西,请尝试如下所示:
if key[1:6] == "00000":
#do something
这将比较字符串在1和6之间的部分,看看它是否等于"00000“。
https://stackoverflow.com/questions/51541042
复制相似问题