#python #pandas #dataframe
#питон #панды #фрейм данных
Вопрос:
Мне нужна ваша помощь То, что я ищу, — это получить приведенную ниже таблицу, начиная с приведенной выше таблицы. Я пробовал разные вещи, но они не сработали.
Date ID Typol Facial#1 Facial#2
abril 426 COR 1000 500
Date ID Typol Facial
abril 426 COR 1000
abril 426 LAR 500
Если Typol является COR, используйте значение Facial #1, чтобы дублировать строку с другим типом столбца (положительное значение) и столбец Facial с #2
Комментарии:
1. Откуда вы взяли значение
LAR
для второй строки?2. это наоборот
Ответ №1:
Довольно просто создайте 2 df, каждый с одним лицевым столбцом, а затем объедините.
Код:
df1 = df[['Date','ID','Typol','Facial#1']]
df1.rename(columns = {"Facial#1": "Facial"}, inplace = True)
df2 = df[['Date','ID','Typol','Facial#2']]
df2.rename(columns = {"Facial#2": "Facial"}, inplace = True)
df_final = pd.concat([df1,df2])
Комментарии:
1. Это также работает, если это с условиями? Например, что такое Facial # 2, когда Typol является FRW, в противном случае ставится Facial # 1
2. Это для многих строк исходного фрейма данных. Необходимо следовать тем, которые относятся к той же дате
Ответ №2:
Версия 2:
дублируйте строки, переместите лицевую сторону # 2 на лицевую сторону # 1, также учитывайте значение Typol
c = ['Date','ID','Typol','Facial#1','Facial#2']
d = [['abril',426,'COR',1000,500],
['test1',537,'LAR',1500,750]]
import pandas as pd
df = pd.DataFrame(d,columns=c)
df['Typol_X'] = df['Typol']
df.loc[(df['Typol'] == 'COR'), 'Typol_X'] = 'LAR'
df.loc[(df['Typol'] == 'LAR') amp; (df['Typol_X'] == 'LAR'), 'Typol_X'] = 'COR'
print (df)
df = df.loc[df.index.repeat(2)]
df.iloc[1::2,3] = df.iloc[::2,4]
df.iloc[1::2,2] = df.iloc[::2,5]
df.drop(['Facial#2','Typol_X'], axis=1,inplace=True)
df.reset_index(drop=True, inplace=True)
print (df)
Результатом этого будет:
Исходный фрейм данных:
Date ID Typol Facial#1 Facial#2 Typol_X
0 abril 426 COR 1000 500 LAR
1 test1 537 LAR 1500 750 COR
Обновленный фрейм данных:
Date ID Typol Facial#1
0 abril 426 COR 1000
1 abril 426 LAR 500
2 test1 537 LAR 1500
3 test1 537 COR 750
Версия 1:
дублируйте строки, переместите лицевую часть # 2 на лицевую часть # 1
Альтернативный способ сделать это будет следующим:
c = ['Date','ID','Typol','Facial#1','Facial#2']
d = [['abril',426,'COR',1000,500],
['test1',537,'DPS',1500,750]]
import pandas as pd
df = pd.DataFrame(d,columns=c)
df = df.loc[df.index.repeat(2)]
df.iloc[1::2,3] = df.iloc[::2,4]
df.drop(['Facial#2'], axis=1,inplace=True)
df.reset_index(drop=True, inplace=True)
print (df)
Результатом этого будет:
Исходный фрейм данных:
Date ID Typol Facial#1 Facial#2
0 abril 426 COR 1000 500
1 test1 537 DPS 1500 750
Обновленный фрейм данных:
Date ID Typol Facial#1
0 abril 426 COR 1000
1 abril 426 COR 500
2 test1 537 DPS 1500
3 test1 537 DPS 750
Комментарии:
1. Но в вашем коде повторяющаяся строка имеет то же значение в Typol. Мне нужно, чтобы она имела другое значение, например, противоположное (белое / черное)
2. Посмотрите, отвечает ли обновленный ответ на ваш дополнительный вопрос.