如何将多组列转换为熊猫中的单列?

发布于 2025-01-24 22:39:55 字数 2553 浏览 0 评论 0 原文

我想将dataFrame( azi_0,azi_0,dist_0 )转换为dataframe( df )中的dist_47 )如 new_df 吗?

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

样本数据框, df

current_sim_az_obj1 current_sim_distance_r_obj1 Azimuth 距离
-60 3.950372041 -59.73007665 0
-60 6.950372041 输出
-59.89004647
8.950372041- 7.765
new_df 预期 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 2.38397709
-55 2.38397709 -55.27091802 3.12
-55 2.38397709 -55.27091802 3.12
-5555 3.09 -55.8508086
2.38397709 -55.8508086 3.09
-55 2.38397709 -55.57086142 3.065
-55 2.38397709 -55.57086142 3.065

如何将几列结合到单列中?

i want to convert a columns(Azi_0 to Azi_47,Dist_0 to Dist_47) in dataframe(df) to a two column(Azimuth,Distance) as in new_df?

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

sample dataframe,df:
sample data

expected output,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

How to combine several columns to a single column?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忘年祭陌 2025-01-31 22:39:55

您本质上是在询问如何将某些DF列的值合并为一个列 - 您可以这样做:

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

属性: Erfan的答案 to coalescce“> coalesce "> coalesce actor”> a>

您可能需要对于您所显示的数据。

You are essentially asking how to coalesce a values of certain df-columns into one column - you can do it like this:

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)

which randomly creates:

    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

To coalesce this and only keep filled values you use

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)

to get a coalesced new 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

Attributation: inspired by Erfan's answer to Coalesce values from 2 columns into a single column in a pandas dataframe

You may need to Replacing blank values (white space) with NaN in pandas for your shown data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文