简体   繁体   English

在 Python 中,有没有一种简单的方法可以以这种方式操作 dataframe?

[英]In Python, is there an easy way to manipulate dataframe in this way?

1

2

Hello, I have a dataframe that looks like 1 and would like to make it to 2. What would be the easiest way to do this in Python?您好,我有一个 dataframe,它看起来像 1,并希望将其变为 2。在 Python 中执行此操作的最简单方法是什么? Thank you谢谢

You can use for-loop to work with every column separatelly and later add this to new DataFrame您可以使用 for-loop 单独处理每一列,然后将其添加到新的 DataFrame

First get columns Code , State1_data ,首先获取列CodeState1_data
Next get string State1 from string State1_data and create column State with this value.接下来从字符串State1_data中获取字符串State1并使用此值创建列State Next rename column State1_data to data .接下来将列State1_data重命名为data Finally append this to new DataFrame .最后append这个到新的DataFrame

And repeate it for other colums.并为其他列重复它。

import pandas as pd

data = {
    'Code': [1,2,3],
    'State1_data': ['A','B','C'], 
    'State2_data': ['D','E','F'], 
    'State3_data': ['G','H','I'],
} # columns

df = pd.DataFrame(data)
print(df)

# create new DataFrame for result
new_df = pd.DataFrame()

# get names which start with `State`
#columns = ['State1_data', 'State2_data', 'State3_data']
columns = [name for name in df.columns if name.startswith('State')]

for col in columns:
    # get columns `Code`, `State1_data`
    temp_df = df[['Code', col]].copy()  

    # add value `State1` to column `State`
    temp_df['State'] = col.split('_')[0]            

    # rename `State1_data` to `data`
    temp_df = temp_df.rename(columns={col: 'data'})

    # append to new DataFrame
    new_df = new_df.append(temp_df)

# ---     

# change order
new_df = new_df[ ['Code', 'State', 'data'] ]  

# reset index
new_df = new_df.reset_index(drop=True)

print(new_df)

Result:结果:

   Code State1_data State2_data State3_data
0     1           A           D           G
1     2           B           E           H
2     3           C           F           I
   Code   State data
0     1  State1    A
1     2  State1    B
2     3  State1    C
3     1  State2    D
4     2  State2    E
5     3  State2    F
6     1  State3    G
7     2  State3    H
8     3  State3    I

EDIT:编辑:

Now I see you use Code as index - so it needs little changes现在我看到您使用Code作为索引 - 所以它需要很少的变化

import pandas as pd

data = {
    'Code': [1,2,3],
    'State1_data': ['A','B','C'], 
    'State2_data': ['D','E','F'], 
    'State3_data': ['G','H','I'],
} # columns

df = pd.DataFrame(data)
df.index = df['Code']
del df['Code']
print(df)

# create new DataFrame for result
new_df = pd.DataFrame()

# get names which start with `State`
#columns = ['State1_data', 'State2_data', 'State3_data']
#columns = [name for name in df.columns if name.startswith('State')]
columns = df.columns

for col in columns:
    # get columns `Code`, `State1_data`
    temp_df = df[[col]].copy()  

    # add value `State1` to column `State`
    temp_df['State'] = col.split('_')[0]            

    # rename `State1_data` to `data`
    temp_df = temp_df.rename(columns={col: 'data'})

    # append to new DataFrame
    new_df = new_df.append(temp_df)
    
# ---

# change order
new_df = new_df[ ['State', 'data'] ]  

print(new_df)

Result:结果:

     State1_data State2_data State3_data
Code                                    
1              A           D           G
2              B           E           H
3              C           F           I
       State data
Code             
1     State1    A
2     State1    B
3     State1    C
1     State2    D
2     State2    E
3     State2    F
1     State3    G
2     State3    H
3     State3    I

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 有没有一种简单的方法来在Python中操作XML文档? - Is there an easy way to manipulate XML documents in Python? 轻松操作数组值 - Manipulate array values in an easy way Python Pandas Dataframe:清理和操作数据的快速方法? - Python Pandas Dataframe: Fast way to clean and manipulate data? 有没有一种简单的方法可以在 Python 中编写这个? - Is there an easy way to write this in Python? 是否有一种简单/快捷的方法来获得 python 中任何数据帧的基本统计数据的可视化? - Is there an easy/shortcut way to obtain visualizations of basic stats of any dataframe in python? 在 Python pandas DataFrame 中为数字添加千位分隔符的简单方法 - Easy way to add thousand separator to numbers in Python pandas DataFrame 是否有一种简单的方法可以在 Python 中绘制和操作持续时间(小时/分钟/秒)数据? 非日期时间数据 - Is there an easy way to plot and manipulate time duration (hours/minutes/seconds) data in Python? NOT datetime data 有没有办法用Python操作图标文件? - Is there a way to manipulate a icon file with Python? 在Python中操作目录的最简单方法? - Simplest way to manipulate directories in Python? Python:操纵字符串的有效方法? - Python: Efficient way to manipulate a string?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM