簡體   English   中英

合並列並使用合並后的數據填充空白區域 Pandas Python

[英]Merge columns and fill the empty space with the merged data using Pandas Python

我需要將 38 合並到 36、45 到 43 以及 79 到 78 以填充合並列上的空白區域。

數據集

0 5個 36 38 43 45 78 79
1個 一種 01JUN2022 1.2 1.2
2個 C 01JUN2022 1.4 1.4
3個 01JUN2022 1.5 F 1.6
4個 G 01JUN2022 1.7 H 1.7
5個 01JUN2022 1.4 1.8
6個 01JUN2022 1.7 大號 1.3

必填 output

0 5個 36 43 79
1個 一種 01JUN2022 1.2 1.2
2個 C 01JUN2022 1.4 1.4
3個 01JUN2022 1.5 F 1.6
4個 G 01JUN2022 1.7 H 1.7
5個 01JUN2022 1.4 1.8
6個 01JUN2022 1.7 大號 1.3

在此處輸入圖像描述

您可以重命名列和groupby.first

# assuming the values are integer
# for string use {'38': '36'...}
merge = {38: 36, 45: 43, 78: 79}

out = df.rename(columns=merge).groupby(level=0, axis=1).first()

output:

  0          5    36 43   79
1  A  01JUN2022  1.2  B  1.2
2  C  01JUN2022  1.4  D  1.4
3  E  01JUN2022  1.5  F  1.6
4  G  01JUN2022  1.7  H  1.7
5  I  01JUN2022  1.4  J  1.8
6  K  01JUN2022  1.7  L  1.3

嘗試這個;

df[36] = df[[36,38]].sum(axis=1)
df[43] = df.apply(lambda x: x[43] if pd.isna(x[45]) else x[45],axis=1)
df[79] = df[[78,79]].sum(axis=1)

df.drop([38,45,78],axis=1,inplace=True)

另一種可能的解決方案,基於pandas.DataFrame.combine_first

df.iloc[:, 0:2].join(
   [df[x[0]].combine_first(df[x[1]]) for x in zip([36,43,78], [38,45,79])])

Output:

   0          5   36 43   78
0  A  01JUN2022  1.2  B  1.2
1  C  01JUN2022  1.4  D  1.4
2  E  01JUN2022  1.5  F  1.6
3  G  01JUN2022  1.7  H  1.7
4  I  01JUN2022  1.4  J  1.8
5  K  01JUN2022  1.7  L  1.3

或者:

idx = [36, 43, 78]
df.iloc[:, 0:2].join(df.loc[:, idx].combine_first(
    df.loc[:, [38, 45, 79]].set_axis(idx, axis=1)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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