Pandas Python: получение одного значения из DataFrame - PullRequest
0 голосов
/ 23 октября 2018

Я реализовал функцию, которая в первый раз встречает значение в кадре данных panda, но я чувствую, что реализация довольно уродлива.Хотели бы вы иметь более хороший способ его реализации?

[mots] - это массив строк

# Sans doutes la pire implémentation au monde...
def find_singular_value(self, mots):
    bool_table = self.document.isin(mots)
    for i in range(bool_table.shape[0]):
        for j in range(bool_table.shape[1]):
            boolean = bool_table.iloc[i][j]
            if boolean:
                return self.document.iloc[i][j + 1]

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вот решение для получения значения j + 1.Используются значения df.unstack и df.shift

df = self.document.unstack()
vals = df[df.isin(mots).shift().fillna(False)]

, которые будут содержать все значения j + 1 в self.documents.Затем вы можете выбрать первый, как в моем предыдущем ответе.Надеюсь, это работает для вас.

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

Этот лайнер должен дать вам то, что вам нужно.

self.document[self.document.isin(mots)].melt()["value"].dropna().values[0]

Применяет вашу маску isin к исходному df, затем находит первое значение non nan, используя pd.melt и df.dropna

Вот простая разбивка:

>>> df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6],"c":[7,8,9]})
>>> df.isin([4,6])
       a      b      c
0  False   True  False
1  False  False  False
2  False   True  False
>>> df[df.isin([4,6])]
    a    b   c
0 NaN  4.0 NaN
1 NaN  NaN NaN
2 NaN  6.0 NaN
>>> df[df.isin([4,6])].melt()
  variable  value
0        a    NaN
1        a    NaN
2        a    NaN
3        b    4.0
4        b    NaN
5        b    6.0
6        c    NaN
7        c    NaN
8        c    NaN
>>> df[df.isin([4,6])].melt()["value"]
0    NaN
1    NaN
2    NaN
3    4.0
4    NaN
5    6.0
6    NaN
7    NaN
8    NaN
Name: value, dtype: float64
>>> df[df.isin([4,6])].melt()["value"].dropna()
3    4.0
5    6.0
Name: value, dtype: float64
>>> df[df.isin([4,6])].melt()["value"].dropna().values
array([ 4.,  6.])
>>> df[df.isin([4,6])].melt()["value"].dropna().values[0]
4.0
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...