如何在Pandas DataFrame中将True/False映射为1/0?

293

我在Python的pandas数据框中有一个列,其中包含布尔值True/False,但是为了进行进一步计算,我需要将它们表示为1/0。是否有快速的pandas/numpy方法来实现这个目标?


2
还需要进行哪些进一步的计算? - Jon Clements
1
跟随 @JonClements 的说法,为什么需要将布尔型转换为整型才能进行计算?布尔型可以直接进行算术运算(因为它在内部实际上是一个整型)。 - cs95
3
@cs95 - Pandas在内部使用numpy bools,它们的行为可能会有所不同。在普通的Python中,True + True = 2,但在Pandas中,numpy.bool_(True) + numpy.bool_(True) = True,这可能不是您特定计算所期望的行为。 - sql_knievel
2
我需要它是因为statsmodels不允许在逻辑回归中使用布尔数据。 - Peter B
13个回答

0

这是一个基于现有答案的可重现示例:

import pandas as pd


def bool_to_int(s: pd.Series) -> pd.Series:
    """Convert the boolean to binary representation, maintain NaN values."""
    return s.replace({True: 1, False: 0})


# generate a random dataframe
df = pd.DataFrame({"a": range(10), "b": range(10, 0, -1)}).assign(
    a_bool=lambda df: df["a"] > 5,
    b_bool=lambda df: df["b"] % 2 == 0,
)

# select all bool columns (or specify which cols to use)
bool_cols = [c for c, d in df.dtypes.items() if d == "bool"]

# apply the new coding to a new dataframe (or can replace the existing one)
df_new = df.assign(**{c: lambda df: df[c].pipe(bool_to_int) for c in bool_cols})

0

真%(奇数)= 1 假%(奇数)= 0


你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

0
在Pandas DataFrame中将True/False值转换为1/0的最有效方法是使用pd.Series.view()方法。该方法创建一个新的NumPy数组,与原始DataFrame列共享内存,但具有不同的数据类型。以下是一个示例:
import pandas as pd

# create a sample DataFrame with True/False values
df = pd.DataFrame({'A': [True, False, True], 'B': [False, True, False]})

# convert True/False values to 1/0 using view()
df['A'] = df['A'].view('i1')
df['B'] = df['B'].view('i1')

# print the resulting DataFrame
print(df)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接