データを並べ替えずにデータフレームの一意の値を出力する方法に関して、いくつかの投稿が行われていることを知っています。
私は何度もこれらのメソッドを実装しようとしましたが、問題は問題のデータフレームがどのように定義されているかに関係していると思います。
基本的には、「C」という名前のデータフレームを調べて、現在保存されている順序を変更せずに、「C1」という名前の新しいデータフレームに一意の値を出力したいと思います。
私が現在使用している行は次のとおりです。
C1 = pd.DataFrame(np.unique(C))
ただし、これは昇順のリストを返します(ただし、重複を削除した場合にのみリストの順序を保持したいだけです)。
繰り返しになりますが、私のコードを見て首を横に振る上級ユーザーに謝罪します-私はまだ学んでいます!そして、はい、私はこの問題を解決するために多くの方法を試しました(Cデータフレームの再定義、出力をリストに変換するなど)、残念ながら役に立たなかったので、これはPythonの神々への助けを求める私の叫びです。CとC1の両方をデータフレームとして定義しました。これは、これらがデータを格納するのに最適なデータ構造であり、後で呼び出して使用できるようにするためです。さらに、に含まれるデータに影響を与えずに列に名前を付けると非常に便利です。データフレーム)。
もう一度、あなたの助けをいただければ幸いです。
F0 = ('08/02/2018','08/02/2018',50)
F1 = ('08/02/2018','09/02/2018',52)
F2 = ('10/02/2018','11/02/2018',46)
F3 = ('12/02/2018','16/02/2018',55)
F4 = ('09/02/2018','28/02/2018',48)
F_mat = [[F0,F1,F2,F3,F4]]
F_test = pd.DataFrame(np.array(F_mat).reshape(5,3),columns=('startdate','enddate','price'))
#convert string dates into DateTime data type
F_test['startdate'] = pd.to_datetime(F_test['startdate'])
F_test['enddate'] = pd.to_datetime(F_test['enddate'])
#convert datetype to be datetime type for columns startdate and enddate
F['startdate'] = pd.to_datetime(F['startdate'])
F['enddate'] = pd.to_datetime(F['enddate'])
#create contract duration column
F['duration'] = (F['enddate'] - F['startdate']).dt.days + 1
#re-order the F matrix by column 'duration', ensure that the bootstrapping
#prioritises the shorter term contracts
F.sort_values(by=['duration'], ascending=[True])
# create prices P
P = pd.DataFrame()
for index, row in F.iterrows():
new_P_row = pd.Series()
for date in pd.date_range(row['startdate'], row['enddate']):
new_P_row[date] = row['price']
P = P.append(new_P_row, ignore_index=True)
P.fillna(0, inplace=True)
#create C matrix, which records the unique day prices across the observation interval
C = pd.DataFrame(np.zeros((1, intNbCalendarDays)))
C.columns = tempDateRange
#create the Repatriation matrix, which records the order in which contracts will be
#stored in the A matrix, which means that once results are generated
#from the linear solver, we know exactly which CalendarDays map to
#which columns in the results array
#this array contains numbers from 1 to NbContracts
R = pd.DataFrame(np.zeros((1, intNbCalendarDays)))
R.columns = tempDateRange
#define a zero filled matrix, P1, which will house the dominant daily prices
P1 = pd.DataFrame(np.zeros((intNbContracts, intNbCalendarDays)))
#rename columns of P1 to be the dates contained in matrix array D
P1.columns = tempDateRange
#create prices in correct rows in P
for i in list(range(0, intNbContracts)):
for j in list(range(0, intNbCalendarDays)):
if (P.iloc[i, j] != 0 and C.iloc[0,j] == 0) :
flUniqueCalendarMarker = P.iloc[i, j]
C.iloc[0,j] = flUniqueCalendarMarker
P1.iloc[i,j] = flUniqueCalendarMarker
R.iloc[0,j] = i
for k in list(range(j+1,intNbCalendarDays)):
if (C.iloc[0,k] == 0 and P.iloc[i,k] != 0):
C.iloc[0,k] = flUniqueCalendarMarker
P1.iloc[i,k] = flUniqueCalendarMarker
R.iloc[0,k] = i
elif (C.iloc[0,j] != 0 and P.iloc[i,j] != 0):
P1.iloc[i,j] = C.iloc[0,j]
#convert C dataframe into C_list, in prepataion for converting C_list
#into a unique, order preserved list
C_list = C.values.tolist()
#create C1 matrix, which records the unique day prices across unique days in the observation period
C1 = pd.DataFrame(np.unique(C))
使用DataFrame.duplicatedは()あなたのデータフレームは重複が含まれているかいないかどうかを確認してください。はいの場合は、DataFrame.drop_duplicate()を試すことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加