如何按照其他列的条件来条件性地拆分Pandas列?

2024-10-05 14:31:13 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的熊猫数据框

Id        IsDef     Data                                       
1         Y         1a
2         N,N,N,Y   2a,2b,2c,2d
3         N,Y       3a,3b

我如何使用熊猫将其拆分如下?仅优先考虑前两个“是”和“否”

^{pr2}$

Tags: 数据iddatapr2isdef
1条回答
网友
1楼 · 发布于 2024-10-05 14:31:13

您可以将列展平到DataFrame

from itertools import chain

d = df['Data'].str.split(',')
isdef = df['IsDef'].str.split(',')

df = pd.DataFrame({
    'Data' : list(chain.from_iterable(d)), 
    'IsDef' : list(chain.from_iterable(isdef)), 
    'Id' : df['Id'].repeat(d.str.len())
})

然后使用^{}作为每个组的计数器,并通过^{}筛选出没有前2行的所有行:

^{pr2}$

然后用^{}^{}重塑形状,并通过^{}添加缺少的类别。最后一个由f-strings在列中展平MultiIndex

mux = pd.MultiIndex.from_product([['Y','N'], np.arange(N)])
df = df.set_index(['Id','IsDef', 'g'])['Data'].unstack([1,2]).reindex(columns=mux)
df.columns = [f'Data{i}_{j+1}' for i, j in df.columns]
print (df)
   DataY_1  DataY_2 DataN_1 DataN_2
Id                                 
1       1a      NaN     NaN     NaN
2       2d      NaN      2a      2b
3       3b      NaN      3a     NaN

相关问题 更多 >