首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的拆分列标题编号和字符串

python中的拆分列标题编号和字符串
EN

Stack Overflow用户
提问于 2022-08-12 06:30:21
回答 2查看 97关注 0票数 0

下面是我的玩具示例,我的问题是如何创建名为trial={2,3}的新列,2&3来自2.0__sum_values,3.0__sum_values列中的数字部分,

我的代码是:

代码语言:javascript
复制
import pandas as pd

before_spliting = {"ID": [1, 2,3], "2.0__sum_values": [33,28,40],"2.0__mediane": [33,70,20],"2.0__root_mean_square":[33,4,30],"3.0__sum_values": [33,28,40],"3.0__mediane": [33,70,20],"3.0__root_mean_square":[33,4,30]}
before_spliting = pd.DataFrame(before_spliting)
print(before_spliting)

   ID  2.0__sum_values  2.0__mediane  2.0__root_mean_square  3.0__sum_values  \
0   1               33            33                     33               33   
1   2               28            70                      4               28   
2   3               40            20                     30               40   

   3.0__mediane  3.0__root_mean_square  
0            33                     33  
1            70                      4  
2            20                     30  


after_spliting = { "ID": [1,1,2, 2,3,3], "trial": [2, 3,2,3,2,3],"sum_values": [33,33,28,28,40,40],"mediane": [33,33,70,70,20,20],"root_mean_square":[33,33,4,4,30,30]}
after_spliting = pd.DataFrame(after_spliting)
print(after_spliting)

   ID  trial  sum_values  mediane  root_mean_square
0   1      2          33       33                33
1   1      3          33       33                33
2   2      2          28       70                 4
3   2      3          28       70                 4
4   3      2          40       20                30
5   3      3          40       20                30
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-12 11:51:40

你可以试试:

代码语言:javascript
复制
res = df.melt(id_vars="ID")
res[["trial", "columns"]] = res["variable"].str.split("__", expand=True)
res = (
    res
    .pivot_table(
        index=["ID", "trial"], columns="columns", values="value", aggfunc=list
    )
    .explode(sorted(set(res["columns"])))
    .reset_index()
)

以下输入数据的结果

代码语言:javascript
复制
data = {
    "ID": [1, 2, 3],
    "2.0__sum_values": [33, 28, 40], "2.0__mediane": [43, 80, 30], "2.0__root_mean_square":[37, 4, 39],
    "3.0__sum_values": [34, 29, 41], "3.0__mediane": [44, 81, 31], "3.0__root_mean_square":[38, 5, 40]
}
df = pd.DataFrame(data)

代码语言:javascript
复制
columns  ID trial mediane root_mean_square sum_values
0         1   2.0      43               37         33
1         1   3.0      44               38         34
2         2   2.0      80                4         28
3         2   3.0      81                5         29
4         3   2.0      30               39         40
5         3   3.0      31               40         41

具有相同输出的替代解决方案:

代码语言:javascript
复制
res = df.melt(id_vars="ID")
res[["trial", "columns"]] = res["variable"].str.split("__", expand=True)
res = res.set_index(["ID", "trial"]).drop(columns="variable").sort_index()
res = pd.concat(
    (group[["value"]].rename(columns={"value": key})
     for key, group in res.groupby("columns")),
    axis=1
).reset_index()
票数 0
EN

Stack Overflow用户

发布于 2022-08-12 07:17:22

因为您使用的是花括号{},所以在花括号{}中不可能有重复的变量,因此可以使用方括号[]来创建新列。

代码语言:javascript
复制
trial = []
for i in range(len(d1)):
    trial.append([d1['2.0__sum_values'][i], d1['3.0__sum_values'][i]])

d1['trial'] = trial

最好的运气

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73330052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档