pandas: создать столбец значений, разделенных запятыми, на основе длины строк в другом облаке - PullRequest
0 голосов
/ 10 июля 2020

У меня есть такой фрейм данных:

df = {"text":["see you in five minutes", "she is my friend", "she goes to school in five minutes","he is my friend"]}

, и я хотел бы создать еще один столбец повторяющегося значения, разделенного запятыми, на основе длины строк в каждой строке столбца df.

желаемый результат:

df = {"text":["see you in five minutes", "she is my friend", "she goes to school in five minutes","he is my friend"],
      "new_text":["s,s,s,s,s", "s,s,s,s", "s,s,s,s,s,s,s","s,s,s,s"]}

Я пробовал df.text.str.split().apply(len), но не знаю, как действовать дальше.

Ответы [ 3 ]

3 голосов
/ 10 июля 2020

попробуйте это,

df['new_text'] = (
    df.text.str.split().str.len()
        .apply(lambda x: x * ['s']).str.join(',')
)

                                 text       new_text
0             see you in five minutes      s,s,s,s,s
1                    she is my friend        s,s,s,s
2  she goes to school in five minutes  s,s,s,s,s,s,s
3                     he is my friend        s,s,s,s
1 голос
/ 10 июля 2020

Попробуйте это:

    import pandas as pd

    def calc_size (row):
       size = len(row['text'].split())
       out=""
       print(size)
       for i in range(size):
           
           if i<size:
               out+="s,"
           else:
               out+="s"
               return out


    data = {"text":["see you in five minutes", "she is my friend", "she goes to school in five minutes","he is my friend"]}
    df = pd.DataFrame(data)
    df["new_column"] = df.apply(lambda row: calc_size(row), axis=1)
    print(df)

text     new_column
0             see you in five minutes      s,s,s,s,s
1                    she is my friend        s,s,s,s
2  she goes to school in five minutes  s,s,s,s,s,s,s
3                     he is my friend        s,s,s,s
1 голос
/ 10 июля 2020

Используйте Series.str.split вместе с Series.str.len, чтобы получить длину строк, затем используйте простое понимание списка с join:

df['new_text'] = [','.join(['s']*n) for n in df['text'].str.split().str.len()]

Результат:

                                 text       new_text
0             see you in five minutes      s,s,s,s,s
1                    she is my friend        s,s,s,s
2  she goes to school in five minutes  s,s,s,s,s,s,s
3                     he is my friend        s,s,s,s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...