2024-06-16 12:47:24 发布
网友
如果我有这样的熊猫数据帧:
colA colB A A1 B C1 A B1 B A1
colA有2个唯一值(A、B),colB有3个唯一值(A1、B1和C1)。你知道吗
我想创建一个新的数据帧,其中colA和colB都是组合,另一列colC是1或0,基于前面df中的组合。你知道吗
预期结果:
colA colB colC A A1 1 A B1 1 A C1 0 B A1 1 B B1 0 B C1 1
首先通过^{}由1填充创建新列,然后通过两列的^{}值创建^{},在^{}使用^{}之后,可以通过fill_value参数为colC列中的新附加行设置值:
1
fill_value
colC
mux = pd.MultiIndex.from_product([df['colA'].unique(), df['colB'].unique()], names=['colA','colB']) df1 = df.assign(colC = 1).set_index(['colA','colB']).reindex(mux, fill_value=0).reset_index() print (df1) colA colB colC 0 A A1 1 1 A C1 0 2 A B1 1 3 B A1 1 4 B C1 1 5 B B1 0
另一种方法是使用^{}、^{}和^{}重塑:
df1 = (df.assign(colC = 1) .set_index(['colA','colB'])['colC'] .unstack(fill_value=0) .stack() .reset_index(name='ColC')) print (df1) colA colB ColC 0 A A1 1 1 A B1 1 2 A C1 0 3 B A1 1 4 B B1 0 5 B C1 1
另一种解决方案是通过^{}创建新的DataFrame,使用indicator=True创建^{},重命名列并通过both比较和转换为整数来设置True/False到1/0的映射:
DataFrame
indicator=True
both
True/False
1/0
from itertools import product df1 = pd.DataFrame(product(df['colA'].unique(), df['colB'].unique()), columns=['colA','colB']) df = df1.merge(df, how='left', indicator=True).rename(columns={'_merge':'colC'}) df['colC'] = df['colC'].eq('both').astype(int) print (df) colA colB colC 0 A A1 1 1 A C1 0 2 A B1 1 3 B A1 1 4 B C1 1 5 B B1 0
如有必要,最后添加按^{}按两列排序:
df1 = df1.sort_values(['colA','colB'])
首先通过^{} 由} 值创建^{} ,在^{} 使用^{} 之后,可以通过
1
填充创建新列,然后通过两列的^{fill_value
参数为colC
列中的新附加行设置值:另一种方法是使用^{} 、^{} 和^{} 重塑:
另一种解决方案是通过^{} 创建新的} ,重命名列并通过
DataFrame
,使用indicator=True
创建^{both
比较和转换为整数来设置True/False
到1/0
的映射:如有必要,最后添加按^{} 按两列排序:
相关问题 更多 >
编程相关推荐