如何在 pandas 中将多组列转换为单列?

How to convert multiple set of column to single column in pandas?

我想在数据框(df) 到两列 (Azimuth,Distance)new_df?

Azi = [f"Azi_{i}" for i in range(47)]  
dist = [f"Dist_{i}" for i in range(47)]

示例数据帧,df

预期输出,new_df

Current_Sim_Az_obj1 Current_Sim_distance_r_obj1 Azimuth Distance
-60 3.950372041 -59.73007665 3.07
-60 3.950372041 -59.73007665 3.07
-60 6.950372041 -59.4701257 7.89
-60 6.950372041 -59.89004647 7.765
-60 8.950372041 -59.64009363 8.345
-60 8.950372041 -59.58010495 8.425
-60 8.950372041 -59.58010495 8.425
-55 2.38397709 -55.06095763 3.14
-55 2.38397709 -55.21092934 3.065
-55 2.38397709 -55.21092934 3.065
-55 2.38397709 -55.2609199 3.03
-55 2.38397709 -55.2609199 3.03
-55 2.38397709 -55.2609199 3.03
-55 2.38397709 -55.2609199 3.03
-55 2.38397709 -55.03096329 3.105
-55 2.38397709 -55.03096329 3.105
-55 2.38397709 -55.32090858 3
-55 2.38397709 -55.32090858 3
-55 2.38397709 -55.27091802 3.12
-55 2.38397709 -55.27091802 3.12
-55 2.38397709 -55.8508086 3.09
-55 2.38397709 -55.8508086 3.09
-55 2.38397709 -55.57086142 3.065
-55 2.38397709 -55.57086142 3.065

如何将多个列合并为一个列?

您实际上是在询问如何将某些 df-columns 的值合并到一列中 - 您可以这样做:

from random import choice
import pandas as pd

# all azimuth names
azi_names = [f"Azi_{i}" for i in range(5)]  

# all distance names
dist_names = [f"Dist_{i}" for i in range(5)]

df = pd.DataFrame(columns = azi_names + dist_names)

# put some values in
for i in range(20):
    k = choice(range(5))
    df = df.append({f"Azi_{k}": i, f"Dist_{k}": i}, ignore_index=True)

print(df)

随机创建:

    Azi_0  Azi_1  Azi_2  Azi_3  Azi_4  Dist_0  Dist_1  Dist_2  Dist_3  Dist_4
0     NaN    NaN    NaN    0.0    NaN     NaN     NaN     NaN     0.0     NaN
1     NaN    1.0    NaN    NaN    NaN     NaN     1.0     NaN     NaN     NaN
2     2.0    NaN    NaN    NaN    NaN     2.0     NaN     NaN     NaN     NaN
3     NaN    NaN    3.0    NaN    NaN     NaN     NaN     3.0     NaN     NaN
4     NaN    4.0    NaN    NaN    NaN     NaN     4.0     NaN     NaN     NaN
5     NaN    NaN    NaN    NaN    5.0     NaN     NaN     NaN     NaN     5.0
6     6.0    NaN    NaN    NaN    NaN     6.0     NaN     NaN     NaN     NaN
7     NaN    7.0    NaN    NaN    NaN     NaN     7.0     NaN     NaN     NaN
8     NaN    8.0    NaN    NaN    NaN     NaN     8.0     NaN     NaN     NaN
9     9.0    NaN    NaN    NaN    NaN     9.0     NaN     NaN     NaN     NaN
10    NaN    NaN   10.0    NaN    NaN     NaN     NaN    10.0     NaN     NaN
11   11.0    NaN    NaN    NaN    NaN    11.0     NaN     NaN     NaN     NaN
12   12.0    NaN    NaN    NaN    NaN    12.0     NaN     NaN     NaN     NaN
13    NaN    NaN   13.0    NaN    NaN     NaN     NaN    13.0     NaN     NaN
14    NaN   14.0    NaN    NaN    NaN     NaN    14.0     NaN     NaN     NaN
15    NaN    NaN    NaN   15.0    NaN     NaN     NaN     NaN    15.0     NaN
16    NaN    NaN    NaN    NaN   16.0     NaN     NaN     NaN     NaN    16.0
17    NaN    NaN   17.0    NaN    NaN     NaN     NaN    17.0     NaN     NaN
18    NaN    NaN    NaN    NaN   18.0     NaN     NaN     NaN     NaN    18.0
19    NaN    NaN    NaN   19.0    NaN     NaN     NaN     NaN    19.0     NaN

要合并它并只保留您使用的填充值

df2 = pd.DataFrame()

# propagates values and chooses first
df2["AZI"] = df[azi_names].bfill(axis=1).iloc[:, 0]
df2["DIS"] = df[dist_names].bfill(axis=1).iloc[:, 0]

print(df2)

获得合并的新 df:

     AZI   DIS
0    0.0   0.0
1    1.0   1.0
2    2.0   2.0
3    3.0   3.0
4    4.0   4.0
5    5.0   5.0
6    6.0   6.0
7    7.0   7.0
8    8.0   8.0
9    9.0   9.0
10  10.0  10.0
11  11.0  11.0
12  12.0  12.0
13  13.0  13.0
14  14.0  14.0
15  15.0  15.0
16  16.0  16.0
17  17.0  17.0
18  18.0  18.0
19  19.0  19.0

归因: 灵感来自 to

您可能需要 Replacing blank values (white space) with NaN in pandas 显示数据。