Составление таблиц данных и ранжирование - PullRequest
0 голосов
/ 23 ноября 2018

Не могу найти то, что мне нужно в вопросах, пожалуйста, поправьте меня, если я ошибаюсь.У меня есть несколько DFS, которые похожи по форме и которые могут содержать Nans.Предположим, что df, который не содержит nans, выглядит следующим образом:

np.random.seed(1)
mat = lambda: np.random.normal(size=10).reshape((5, 2))
df1 = pd.DataFrame(mat())
df2 = pd.DataFrame(mat())
df3 = pd.DataFrame(mat())

Я хочу как-то сложить df1, df2 и df3 друг на друга.И затем ранжируйте каждое значение по df1, df2, df3 (то есть уровням стека).

Таким образом, отдельные dfs в этом случае будут выглядеть так:

df1

enter image description here

df2

enter image description here

df3

enter image description here

Таким образом, в этом случае в «.iloc[0, 0]» мы имеем значения: 1,62, 1,46 и -1,1, поэтому ранжированный df1будет иметь значение 3, df2 будет иметь значение 2, а df3 будет иметь значение 1.И затем это ранжирование выполняется для каждого значения на всех уровнях данных.В общем случае около 16 информационных фреймов накладываются друг на друга и только 5 рангов, при наличии nans df получает ранг 0.

1 Ответ

0 голосов
/ 23 ноября 2018

Я думаю, вам нужно concat с GroupBy.rank:

df1.loc[0,1] = np.nan

df = pd.concat([df1, df2, df3], keys=('df1','df2','df3')).groupby(level=1).rank().fillna(0)
print (df)
         0    1
df1 0  3.0  0.0
    1  1.0  1.0
    2  1.0  1.0
    3  3.0  3.0
    4  3.0  1.0
df2 0  2.0  1.0
    1  2.0  2.0
    2  3.0  2.0
    3  1.0  2.0
    4  2.0  3.0
df3 0  1.0  2.0
    1  3.0  3.0
    2  2.0  3.0
    3  2.0  1.0
    4  1.0  2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...