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