簡體   English   中英

使用熊貓組合列集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM