Как я могу подстроку подстроки в pandas фрейме данных? - PullRequest
2 голосов
/ 24 марта 2020

У меня есть Pandas кадр данных, подобный этому

String = ["".join(np.random.choice(list("PQRSTUVXYZ"), size=7)) for _ in range(7)]
Position = np.random.randint(2,7, size = 7)
df=pd.DataFrame((String,Position)).T

Я хотел бы применить функцию lower () ПРОСТО в букве, индекс которой является столбцом Position.

Я пробовал:

df = df[0][df[1]].str.lower()

Но он опускает всю строку.

Спасибо за вашу помощь!

Ответы [ 2 ]

3 голосов
/ 24 марта 2020

здесь приведено понимание списка с slice и slice_replace:

df['new'] = ([df[0].str.slice_replace(
             i,i+1,df[0].str.slice(i,i+1).iloc[e].lower()).iloc[e] 
             for e,i in enumerate(df[1])])

         0  1      new
0  TZPVTRT  2  TZpVTRT
1  VSSXYUP  3  VSSxYUP
2  YUTXTQS  2  YUtXTQS
3  SZRURSU  5  SZRURsU
4  XRXQVUP  3  XRXqVUP
5  PSQZZVV  6  PSQZZVv
6  XYYXPYV  3  XYYxPYV

, если ваш индекс начинается с 1, а не 0, заменить df[0].str.slice(i,i+1) на df[0].str.slice(i-1,i)

2 голосов
/ 24 марта 2020

Вы можете индексировать строки. Индексируйте до нижнего символа, поверните этот символ до нижнего и затем добавьте все, что осталось. На самом деле ничем не отличается от использования Series.str.slice_replace, но, возможно, немного более читабельно.

df['new_str'] = [s[:i] + s[i].lower() + s[i+1:] for s,i in zip(df[0], df[1])]

         0  1  new_str
0  TTTQTYT  3  TTTqTYT
1  USRRUZS  2  USrRUZS
2  PPXQZZT  6  PPXQZZt
3  UZZVQRQ  3  UZZvQRQ
4  ZVUQPUV  6  ZVUQPUv
5  TRPPSVU  5  TRPPSvU
6  YYZPURQ  5  YYZPUrQ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...