A содержит столбцы x, y1, y2, y3 и y4.
Мне интересно изучить последовательность {y1,y2,y3,y4} относительно x.
Чтобы найти уникальные {y1,y2 ,y3,y4}, встречающуюся для каждого x, я делаю следующее:
B = pd.DataFrame()
for x_temp in A['x'].unique():
B = pd.concat([B, A[A['x'] == x_temp][['x','y1','y2','y3','y4']]])
B = B.drop_duplicates().sort_values(by=['x','y1','y2','y3','y4'])
del x_temp
Я хочу представить новый столбец под названием «count» в B, который содержит # уникальных значений {y1,y2,y3,y4}, которые произошли для этого конкретного x в A.
р>
B['count'] = A.apply(lambda row: (A['y1'] == row['y1']) & (A['y2'] == row['y2']) & (A['y3'] == row['y3']) & (A['y4'] == row['y4']), axis=1).sum()
Это работает, однако не работает, если A или B имеют пропущенные значения. Я хочу, чтобы пропущенные значения также рассматривались как уникальные значения.
Пример:
A = pd.DataFrame({'x':['1','1','1','1','2','2','2','2','2','1'],
'y1':['1','2','2',np.nan,'2',np.nan,'2','2','2','1'],
'y2':['2','1','2','2',np.nan,np.nan,'2','2','1','2'],
'y3':['1','1',np.nan,'2',np.nan,'2',np.nan,np.nan,'1','1'],
'y4':['2','2','2',np.nan,np.nan,'1','2','2','2','2']})
B = pd.DataFrame()
for x_temp in A['x'].unique():
B = pd.concat([B, A[A['x'] == x_temp][['x','y1','y2','y3','y4']]])
B = B.drop_duplicates().sort_values(by=['x','y1','y2','y3','y4'])
del x_temp
B['count'] = A.apply(lambda row: (A['y1'] == row['y1']) & (A['y2'] == row['y2']) & (A['y3'] == row['y3']) & (A['y4'] == row['y4']), axis=1).sum()
print(B)
x y1 y2 y3 y4 count
0 1 1 2 1 2 2
1 1 2 1 1 2 2
2 1 2 2 NaN 2 0
3 1 NaN 2 2 NaN 0
8 2 2 1 1 2 2
6 2 2 2 NaN 2 0
4 2 2 NaN NaN NaN 0
5 2 NaN NaN 2 1 0
Подробнее здесь: https://stackoverflow.com/questions/786 ... columns-in