如何将某些列转换为单独的行,并对具有相同索引的不同行重复所有其他内容

2024-09-28 01:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

当前数据帧:

Office|Room|Empno.1|Empname.1|Desig.1|...|Empno.3|Empname.3|Desig.3|HRA|DA|BASIC

201 | 1 | 001 |约翰|分析师|……| 003 |哈里|工程师| 5000 | 4000 | 12000

我想保持Office和Room为索引,HRA、DA和BASIC为常量,但要为empname.1、empname.2和empname.3分别创建三行,并提供相关的详细信息,即empno、desig。你知道吗

Expected data frame:
Office|Room|Empno|Empname|Desig|HRA|DA|BASIC

201|1|001|John|Analyst|5000|4000|12000
.....
201|1|003|Harry|Engineer|5000|4000|12000
.....

Tags: 数据databasic详细信息framedaroomexpected
2条回答

试试这个。 下面是它的工作原理示例。你知道吗

df = pd.DataFrame({'a1': ['A1', 'A2', 'A3'],
               'b1': ["1:00","2:00","3:00"],
               'c1': ["Apple", "Orange", "Apple"],
               'a2': ['A1', 'A2', 'A3'],
               'b2': ["4:00","5:00","6:00"],
               'c2': ["Apple", "Orange", "Apple"],
               'a3': ['A1', 'A2', 'A3'],
               'b3': ["7:00","8:00","9:00"],
               'c3': ["Apple", "Orange", "Apple"]})

数据帧如下所示

a1  b1      c1      a2   b2     c2      a3  b3      c3
A1  1:00    Apple   A1  4:00    Apple   A1  7:00    Apple
A2  2:00    Orange  A2  5:00    Orange  A2  8:00    Orange
A3  3:00    Apple   A3  6:00    Apple   A3  9:00    Apple

然后我们运行下面的代码

a=df.shape[1]
out={}
def split_df(x):
    for i in range(3):
        out[i] = x.iloc[:,i*a//3:(i+1)*a//3]    
    return out
split_df(df)
for i in range(3):
    out[i].columns = ['a','b','c']
df_oriented=pd.concat([out[0],out[1],out[2]])
df_oriented

结果如下

a   b       c
A1  1:00    Apple
A2  2:00    Orange
A3  3:00    Apple
A1  4:00    Apple
A2  5:00    Orange
A3  6:00    Apple
A1  7:00    Apple
A2  8:00    Orange
A3  9:00    Apple

使用pd.read_csvusecols参数将数据读入多个数据帧,如下所示(例如)。你知道吗

df= pd.read_csv("ThisFile.csv", usecols=[1,3])

这将只将第二列和第四列加载到数据帧中。你知道吗

然后,当您有多个数据帧时,您可以将所有数据帧的列设置为相同的

df1.columns = df2.columns = df3.columns =  ['Office','Room','Empno', 'Empname','Desig','HRA','DA','BASIC']

然后连接数据帧

pd.concat([df1,df2,df3])

相关问题 更多 >

    热门问题