[英]In Python, is there an easy way to manipulate dataframe in this way?
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
,首先获取列Code
, State1_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.