Как распределить список четных / записанных элементов по индексу pandas - PullRequest
0 голосов
/ 05 января 2020

Есть ли способ произвести вывод ниже, как я желаю

У меня pd.dataframe, как показано ниже:

df1

   data
0     1
1     2
2     3
3     4
4     5
5     6
6     7
7     8

, и я хочу добавить столбец списка

lst1 = ['TEXT1','TEXT2']
lst2 = ['text1','text2','text3']

Для случая lst1 он работает на df1, потому что значение индекса и переданное значение делятся
I Вход:

    lst1 = ['TEXT1' , 'TEXT2']
    df1['text'] = np.repeat(lst1, len(df2) // len(lst1))

Выход на lst1:

1 TEXT1
2 TEXT1
3 TEXT1
4 TEXT1
5 TEXT2
6 TEXT2
7 TEXT2
8 TEXT2

Мой желаемый вывод для lst2:

    1 text1
    2 text1
    3 text1
    4 text2
    5 text2
    6 text2
    7 text3
    8 text3

Ответы [ 2 ]

1 голос
/ 05 января 2020

Вам не нужно группировать здесь, вы можете просто повторить, а затем отрезать все, что вам не нужно:

df1['text'] = np.repeat(lst2, np.ceil(len(df1) / len(lst2)))[:len(df1)]
df1
   data   text
0     1  text1
1     2  text1
2     3  text1
3     4  text2
4     5  text2
5     6  text2
6     7  text3
7     8  text3
1 голос
/ 05 января 2020

Вы можете группировать по index, а затем использовать .ngroup() в качестве индекса для вашего списка:

import pandas as pd

d = {'data': [1,2,3,4,5,6,7,8]}
lst2 = ['text1','text2','text3']

df = pd.DataFrame(d)
df['txt'] = df.groupby(df.index // len(lst2)).ngroup().map(lst2.__getitem__)    # or .apply(lambda x: lst2[x])

print(df)

Отпечатки:

   data    txt
0     1  text1
1     2  text1
2     3  text1
3     4  text2
4     5  text2
5     6  text2
6     7  text3
7     8  text3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...