Несмотря на то, что на этот квест был дан ответ, у меня есть более быстрое решение:
df.groups.apply(lambda x: pd.Series([1] * len(x), index=x)).fillna(0, downcast='infer')
И если у вас есть пустые группы или NaN
, вы можете просто:
df.loc[df.groups.str.len() > 0].apply(lambda x: pd.Series([1] * len(x), index=x)).fillna(0, downcast='infer')
Внутри лямбда x
- ваш список, например ['a', 'b', 'c']
. Таким образом, pd.Series
будет выглядеть следующим образом:
In [2]: pd.Series([1, 1, 1], index=['a', 'b', 'c'])
Out[2]:
a 1
b 1
c 1
dtype: int64
Когда все pd.Series
объединяются, они становятся pd.DataFrame
, а их index
становятся columns
; missing index
стал column
с NaN
, как вы можете видеть дальше:
In [4]: a = pd.Series([1, 1, 1], index=['a', 'b', 'c'])
In [5]: b = pd.Series([1, 1, 1], index=['a', 'b', 'd'])
In [6]: pd.DataFrame([a, b])
Out[6]:
a b c d
0 1.0 1.0 1.0 NaN
1 1.0 1.0 NaN 1.0
Теперь fillna
заполняет те NaN
с помощью 0
:
In [7]: pd.DataFrame([a, b]).fillna(0)
Out[7]:
a b c d
0 1.0 1.0 1.0 0.0
1 1.0 1.0 0.0 1.0
И downcast='infer'
должен опуститься от float
до int
:
In [11]: pd.DataFrame([a, b]).fillna(0, downcast='infer')
Out[11]:
a b c d
0 1 1 1 0
1 1 1 0 1
PS .: Не требуется использование .fillna(0, downcast='infer')
.
Я добавляю:
android {
compileOptions {
targetCompatibility = "8"
sourceCompatibility = "8"
}
}
, но это не работает, поэтому я перенесу свой проект в AdroidX, и он действительно работает.
Для справки: репродукция ответа Джейка Уортона :
Вы обновили OkHttp до версии 3.13 или новее и согласно примечаниям к выпуску , OkHttp теперь требует, чтобы вы включили Java 8 в ваших сборках для работы. Вы можете узнать больше о том, как включить это, на https://developer.android.com/studio/write/java8-support .
Вам нужно добавить что-то вроде
blockquote>android { compileOptions { targetCompatibility = "8" sourceCompatibility = "8" } }