У меня есть расплавленный кадр данных панд (df1) следующим образом:
ID protocol n
1000 A 3
1000 B 1
1100 A 10
1100 C 6
1110 C 3
Информация в каждой строке должна использоваться для выборки другого кадра данных (df2), возвращая n индексов из df2.Для этого я написал функцию:
def sample_df_indices(row):
subset = df2.loc[(df2['ID'] == row.ID) & (df2['protocol'] == row.protocol), :]
return subset.sample(row.n).index.tolist()
Применение следующим образом приводит к ошибке:
df1.apply(sample_df_indices, axis=1)
ValueError: не удалось передать входной массив из shape (10) вshape (3)
Ошибка исчезает при применении функции к df1.iloc [0: 2 ,:], но теперь вывод представляется в виде df1!
df1.iloc[0:2,:].apply(sample_df_indices, axis=1)
ID protocol n
0 2480681 4492585 3751667
1 4339442 4339442 4339442
Значения действительно являются индексами из df2, но каким-то образом они помещаются в df1.То, что я ожидаю вернуть, это серия списков панд.
Есть идеи, что я делаю не так?Я использую Python 3.5.3 и панды 0.19.2