python - 带有另一列索引的 Pandas 切片字符串

标签 python pandas

我想使用另一列的索引对这个字符串进行切片。我得到的是 NaN 而不是字符串片段。

import pandas as pd
from pandas import DataFrame, Series

sales = {'name': ['MSFTCA', 'GTX', 'MSFTUSA', ],
         'n_chars': [2, 2, 3],
         'Jan': [150, 200, 50],
         'Feb': [200, 210, 90],
         'Mar': [140, 215, 95]}
df = pd.DataFrame.from_dict(sales)
df

def extract_location(name, n_chars):
    return( name.str[-n_chars:])

df.assign(location=(lambda x: extract_location(x['name'], x['n_chars']))).to_dict()

给予:

{'Feb': {0: 200, 1: 210, 2: 90},
 'Jan': {0: 150, 1: 200, 2: 50},
 'Mar': {0: 140, 1: 215, 2: 95},
 'location': {0: nan, 1: nan, 2: nan},
 'n_chars': {0: 2, 1: 2, 2: 3},
 'name': {0: 'MSFTCA', 1: 'GTX', 2: 'MSFTUSA'}}

最佳答案

你需要apply axis=1 按行处理:

def extract_location(name, n_chars):
    return( name[-n_chars:])


df=df.assign(location=df.apply(lambda x: extract_location(x['name'], x['n_chars']), axis=1))
print (df) 
   Feb  Jan  Mar  n_chars     name location
0  200  150  140        2   MSFTCA       CA
1  210  200  215        2      GTX       TX
2   90   50   95        3  MSFTUSA      USA

df = df.assign(location=df.apply(lambda x: x['name'][-x['n_chars']:], axis=1))
print (df) 
   Feb  Jan  Mar  n_chars     name location
0  200  150  140        2   MSFTCA       CA
1  210  200  215        2      GTX       TX
2   90   50   95        3  MSFTUSA      USA

关于python - 带有另一列索引的 Pandas 切片字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44469513/

相关文章:

python - 如何从信号中去除频率

python - 无法使用 DRF APIClient() 更改 header

python - Django 服务器不向 Logstash 发送日志

python - pandas.io.json.json_normalize 带有非常嵌套的 json

python - django,来自不存在的 kwarg key 的 python keyerror - 我该如何避免这种情况?

python - MariaDB、Python read_sql_table、utf8-bin

python - 如何从 statsmodels 访问季节分解的组件

python - Pandas 中按指定组大小对索引进行分组

python - 将 Julia 数据框转换为 Python Pandas 数据框

Python/Scikit-learn/regressions - 从 pandas Dataframes 到 Scikit 预测