[英]Combining sets of columns using pandas
我有以下数据帧结构:
SC0 Shape S1 S2 S3 C1 C2 C3 D1 D2 D3
2 1 Circle NaN NaN NaN 1 1 1 NaN NaN NaN
3 13 Square 2 1 2 NaN NaN NaN NaN NaN NaN
4 13 Diamond NaN NaN NaN NaN NaN NaN 2 1 2
5 16 Diamond NaN NaN NaN NaN NaN NaN 2 2 2
6 16 Square 2 2 2 NaN NaN NaN NaN NaN NaN
如何将 S1、S2、S3 与 C1、C2、C3、D1、D2、D3 结合起来,使 S1、C1 和 D1 在同一列上,S2、C2 和 D2...(一直到 S16、C16 和D16)?
当形状 = 圆形时,填充的列是 C1-C16,当形状 = 方形时,其 S1-S16 和形状 = 菱形时,其 D1-D16。
我不介意创建一组新的列或将其中的两个复制到现有的集合中,只要我在同一列中拥有所有 #1 分数,#2 相同列等。
谢谢!
IIUC 每个类别都有相同数量的列,并且您希望将其压缩为形状不可知的数字列。 如果是这样,这将起作用:
dfs = []
for var in ['S', 'D', 'C']:
# filter columns with a regex
res = df[df.iloc[:, 2:].filter(regex= var + '\d{1,2}').columns].dropna()
# rename coumns with just numbers to enable concatenation
res.columns = range(3)
dfs.append(res)
df = pd.concat([df.iloc[:, :2], pd.concat(dfs)], 1)
print(df)
输出:
SC0 Shape 0 1 2
2 1 Circle 1.0 1.0 1.0
3 13 Square 2.0 1.0 2.0
4 13 Diamond 2.0 1.0 2.0
5 16 Diamond 2.0 2.0 2.0
6 16 Square 2.0 2.0 2.0
尝试:
n=3
cols_prefixes=["C", "S", "D"]
for i in range(n):
cols=[f"{l}{i+1}" for l in cols_prefixes]
df[f"res{i+1}"]=df[cols].bfill(axis=1).iloc[:,0]
df=df.drop(columns=cols)
输出:
SC0 Shape res1 res2 res3
2 1 Circle 1.0 1.0 1.0
3 13 Square 2.0 1.0 2.0
4 13 Diamond 2.0 1.0 2.0
5 16 Diamond 2.0 2.0 2.0
6 16 Square 2.0 2.0 2.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.