Python -Соединение строковых значений с первой строкой в ​​кадре данных - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь перебрать несколько CSV-файлов и объединить каждый столбец 'sequence' каждого фрейма данных с первым значением. Вот как выглядит каждый файл:

ID      Order    Sequence
1773     1        'AAGG'
1773     2        'TTGG'
1773     3        'GGAA'

И мне нужно, чтобы он выглядел так для каждого CSV:

ID       Sequence
1773   'AAGGTTGGGGAA'

У меня нет необходимости в «заказе» колонка после этого. Я пробовал много разных команд, но не могу найти нужную.

Прямо сейчас у меня есть:

path = r'C:\Users\CAAVR\Desktop\folder\*.csv'
for fname in glob.glob(path):
    df = pd.read_csv(fname)
    first = df['sequence'].iloc[:1]
    next = df['sequence'].iloc[2:]
    final = first.str.join(next)
    print(final)

Я знаю, что .join () не прав, но concat и слияние, похоже, тоже не работают. Продолжайте получать:

AttributeError: 'Series' object has no attribute 'join'

Дайте мне знать, если вам нужна другая информация, и спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вы можете использовать объединение, но перед .join стоит разделитель между строками, здесь он ''. Вы можете присоединиться внутри apply: я предполагаю, что вы хотите одну строку для каждого идентификатора?

df = pd.DataFrame({'ID':[1773,1773,1773],'Order':[1,2,3], 'Sequence':['AAGG','TTGG','GGAA']})
# group df by ID, join all Sequences and convert to dataframe
final = df.groupby('ID')['Sequence'].apply(lambda x: ''.join(x)).to_frame().reset_index()

Выходные данные

    ID      Sequence
 0  1773    AAGGTTGGGGAA
0 голосов
/ 04 марта 2020

Вы можете просто использовать агрегатную функцию для объединения строк.

df = pd.DataFrame({'ID':[1773,1773,1773,1774,1774,1774],'Order':[1,2,3,4,5,6], 'Sequence':['AAGG','TTGG','GGAA','GGTC','ATCG','AAGG']})
df.groupby("ID").agg({"Sequence":"sum"})

Вывод:

    Sequence
ID  
1773    AAGGTTGGGGAA
1774    GGTCATCGAAGG
​

В качестве альтернативы, вы можете просто применить функцию .join к вашей агрегатной функции.

df.groupby("ID").agg({"Sequence":"".join})

В дополнение к этим @fmarm предоставил еще один интересный способ.

Я бы предложил вам go по этим ссылкам для большего понимания:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.join.html

Объединить строки из нескольких строк, используя Pandas groupby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...