как эффективно изменять значения фрейма данных panda - PullRequest
0 голосов
/ 31 мая 2018

Скажем, у меня есть 2 кадра данных.

первый :

100K rows
columns: ID, ch1,ch2...ch10,
binary values

второй

1000K rows
columns: ID, CH.

скажем, что яхочу добавить в DF2 значения DF1 в 1 столбце, чтобы он соответствовал идентификатору & chan.

Я попытался сделать это с помощью простого цикла for, но потребовалось несколько минут, чтобы пройти первые 10K строк.. Интересно, как это можно сделать эффективно - как если бы я делал это с помощью numpy, это работало бы быстрее.просто чтобы уточнить, идентификаторы могут быть перетасованы в DF2 .. поэтому я не могу предсказать его местоположение на основе DF1.

заранее спасибо!

1 Ответ

0 голосов
/ 31 мая 2018

Обновлено сообщение:

Ах, хорошо.Я думаю, я понимаю, что вы говорите.Может быть, попробовать что-то вроде этого:

df1 = pd.DataFrame({ "ID":[1,2,3], "ch1":[0,-1,0], "ch2":[0,0,0], "ch3":[-1,0,1] })

new_df = pd.DataFrame()

min_ch = 1
max_ch = 3
for i in range(min_ch,max_ch+1):
    this_ch_str = "ch"+str(i)
    temp_df = df1[["ID",this_ch_str]].copy()
    temp_df["CH"] = i
    temp_df = temp_df.rename(columns={this_ch_str:"val"})
    temp_df = temp_df[["CH","ID","val"]]
    new_df = new_df.append(temp_df)

Это немного запутанно, но это делает работу.

Исходное сообщение:

Iдумаю, что функция слияния может быть то, что вы ищете.

Вот краткий пример:

import pandas as pd
df1 = pd.DataFrame({"ID":[1,2,3,4,5],"col1":["A","B","C","D","E"]})
df2 = pd.DataFrame({"ID":[1,2,3,4,5,6,7,8,9,10],"col2":["x","y","z","x","y","z","x","y","z","x"]})
df3 = pd.merge(left=df1,right=df2,on="ID",how="left")

Результат, сохраненный в df3, будет выглядеть так:

   ID col1 col2
0   1    A    x
1   2    B    y
2   3    C    z
3   4    D    x
4   5    E    y

Надеюсь, это то, что вы искали!

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