2024-06-10 23:51:38 发布
网友
我在pandas数据框中有一列,其中包含如下值:
['3m5f Hcap'、'6f少女'、'7f Hcap'、'2m6f STK'、'3m Hcap']
这些是指赛马的长度,例如3m5f(3英里5弗隆)相当于29弗隆
我需要创建一个新列,该列将各种竞争长度转换为表示furlongs总数的整数
因此,上述内容将是
[29,6,7,20,24]
我甚至不知道从哪里开始这一个,任何想法赞赏
在pandas中,我没有@Psidom那么精明,所以这里有另一种方法:
pandas
def my_func(_data): val = _data.split(' ')[0] try: midx = val.index('m') - 1 except ValueError: midx = None try: fidx = val.index('f') - 1 except ValueError: fidx = None m = int(val[midx]) if midx != None else 0 f = int(val[fidx]) if fidx != None else 0 return m * 8 + f df['furlong'] = df['data'].apply(lambda x: my_func(x)) data furlong 0 3m5f Hcap 29 1 6f Maiden 6 2 7f Hcap 7 3 2m6f Stks 22 4 3m Hcap 24
然后与他的回答相反:
time df['furlong'] = df['data'].apply(lambda x: my_func(x)) CPU times: user 679 µs, sys: 123 µs, total: 802 µs Wall time: 713 µs def test(df): return (df.data.str.extract("(?:(?P<m>\d+)m)?(?:(?P<f>\d+)f)?", expand=False).fillna(0).astype(int).pipe(lambda df: df.m * 8 + df.f)) time test(df) CPU times: user 3.37 ms, sys: 1.01 ms, total: 4.38 ms Wall time: 3.76 ms
假设您的数据帧为:
df = pd.DataFrame({"dist": ['3m5f Hcap', '6f Maiden', '7f Hcap', '2m6f Stks', '3m Hcap']}) df # dist #0 3m5f Hcap #1 6f Maiden #2 7f Hcap #3 2m6f Stks #4 3m Hcap
您可以将英里(假设m表示英里)和弗隆分别列在不同的列中,然后将它们转换为弗隆:
(df.dist.str.extract("(?:(?P<m>\d+)m)?(?:(?P<f>\d+)f)?", expand=False) .fillna(0).astype(int).pipe(lambda df: df.m * 8 + df.f)) #0 29 #1 6 #2 7 #3 22 #4 24 #dtype: int64
在
pandas
中,我没有@Psidom那么精明,所以这里有另一种方法:然后与他的回答相反:
假设您的数据帧为:
您可以将英里(假设m表示英里)和弗隆分别列在不同的列中,然后将它们转换为弗隆:
相关问题 更多 >
编程相关推荐