Как реплицировать количество строк в dataframe1, чтобы соответствовать n строкам в dataframe 2 в pandas - PullRequest
0 голосов
/ 24 апреля 2020

Я только начал изучать Python несколько месяцев go и только начал использовать StackOverflow, пожалуйста, потерпите меня:
У нас есть два фрейма данных:

df1 :

    0.1,0.2,0.3,0.4  
    1.0,2.0,3.0,4.0
    6.0,7.0,8.0,9.0 

df2:

    Sequence, dataset_ID  
    1,1  
    2,4  
    10,5

Я использую функцию python iterrows для преобразования df1 в:

for ind,row in df1.iterrows():
    row.to_csv(path+'\df1Transposed')

df1Transposed:

    0.1,1.0
    0.2,2.0  
    0.3,3.0  
    0.4,4.0
    0.1,6.0
    0.2,7.0  
    0.3,8.0  
    0.4,9.0

Я пытаюсь найти хороший способ сгруппировать / реплицировать каждую строку в df2, чтобы соответствовать количеству строк в транспонированном df1. Например, 1 транспонированный заголовок и строка в df 1 создает 4 строки и два столбца в df1Transposed (0,1-0,4) и повторяется снова для следующей строки в df1. Таким образом, первая строка в df2 должна повторяться 4 раза, а затем вторая строка должна повторяться еще 4 раза.

dfout:

Sequence, dataset_ID,V,I
1,1,0.1,1.0
1,1,0.2,2.0  
1,1,0.3,3.0  
1,1,0.4,4.0  
2,4,0.1,6.0  
2,4,0.2,7.0  
2,4,0.3,8.0  
2,4,0.4,9.0  

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете использовать комбинацию numpy repeat и arange, чтобы получить индекс, а затем объединить два кадра данных по горизонтали.

Сначала получите транспонирование благодаря удобному @sammywemmy. -liner:

df1_T = pd.concat([df1.iloc[:2].T,
                   df1.iloc[::2].T.set_axis([0,1],axis=1)],ignore_index=True)

Во-вторых, получите длину транспонированного кадра данных, выберите количество строк, которые вы хотите включить в df2, и используйте функции, упомянутые выше:

df_1_l = df1_T.shape[0]
no_rows_from_df2 = 2
index = np.repeat(np.arange(no_rows_from_df2), df_1_l//rows_df2)

df3 = pd.concat([df1_T.reset_index(drop=True),
             df2.iloc[index].reset_index(drop=True)], axis=1)
df3

#     0 1   Sequence  dataset_ID
# 0 0.1 1.0   1       1
# 1 0.2 2.0   1       1
# 2 0.3 3.0   1       1
# 3 0.4 4.0   1       1
# 4 0.1 6.0   2       4
# 5 0.2 7.0   2       4
# 6 0.3 8.0   2       4
# 7 0.4 9.0   2       4

Несколько вещей , это работает, потому что длина df1_T является кратным от выбранного количества строк в df2, если, например, вы хотите повторить строки 0,1,2, тогда длина df1 должна быть 3, 6, 9, 12 ...

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