Python 将多个DataFrame列压缩为Pandas中的单个指示符列
假设我有一个如下所示的数据帧:Python 将多个DataFrame列压缩为Pandas中的单个指示符列,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,假设我有一个如下所示的数据帧: import pandas as pd import numpy as np d = {'ID': [1,2,3,4], 'name': ['bob','shelby','jordan','jeff'], 'type1': [1,1,0,0], 'type2':[1,0,1,0], 'type4':[1,0,0,0], 'type5':[0,0,1,0], 'type6':[0,1,0,0],
import pandas as pd
import numpy as np
d = {'ID': [1,2,3,4],
'name': ['bob','shelby','jordan','jeff'],
'type1': [1,1,0,0],
'type2':[1,0,1,0],
'type4':[1,0,0,0],
'type5':[0,0,1,0],
'type6':[0,1,0,0],
'type8':[0,0,1,0]}
df: pd.DataFrame = pd.DataFrame(data=d)
print(df.head(9))
ID name type1 type2 type4 type5 type6 type8
0 1 bob 1 1 1 0 0 0
1 2 shelby 1 0 0 0 1 0
2 3 jordan 0 1 0 1 0 1
3 4 jeff 0 0 0 0 0 0
我想将“type5”、“type6”和“type8”列压缩为一个称为“其他”的列,并将任何“1”指标聚合为新的“其他”列中的“1”。因此,如果“jordan”有一个“other”列条目,那么他应该有一个“1”指示符,因为他在type6和type8中有一个“1”(因此对每个选定的列(type5、type6、type8)跨行使用max()操作)
所需的框架应类似于:
ID name type1 type2 type4 other
0 1 bob 1 1 1 0
1 2 shelby 1 0 0 1
2 3 jordan 0 1 0 1
3 4 jeff 0 0 0 0
我需要为要压缩的列创建一个布尔掩码,然后在它们之间聚合以创建新列,同时删除旧列。我如何才能做到这一点?在这里尝试您的逻辑
drop_cols = ['type5','type6','type8']
df = (df.assign(other=df[drop_cols].max(1)) # new column with max value
.drop(columns=drop_cols) # drop the old columns
)
输出:
ID name type1 type2 type4 other
0 1 bob 1 1 1 0
1 2 shelby 1 0 0 1
2 3 jordan 0 1 0 1
3 4 jeff 0 0 0 0
使用
any
:
df['other'] = df.loc[:, ['type5','type6','type8']].any(axis=1).astype(int)
df = df.drop(['type5','type6','type8'], axis=1)
结果:
ID name type1 type2 type4 other
0 1 bob 1 1 1 0
1 2 shelby 1 0 0 1
2 3 jordan 0 1 0 1
3 4 jeff 0 0 0 0
很好的回答!谢谢。很好的回答,这很有效。谢谢。