применение пользовательской функции к pandas dataframe дает ошибку широковещания, как решить? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть расплавленный кадр данных панд (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

...