[英]Python dataframe - data values from 3 columns to be mapped under other 3 columns
Python experts, I need some help understanding how I can re-shape or pivot columns of my pandas dataframe. Python专家,我需要一些帮助来理解如何重塑或旋转Pandas数据框的列。 Following is what I want to do, I have a situation where I have 6 columns First_name1, middle_name1, last_name1, first_name2, middle_name2 and last_name2.
以下是我要执行的操作,遇到一种情况,我有6列First_name1,middle_name1,last_name1,first_name2,middle_name2和last_name2。 I want to bring the values of the last 3 columns under the 1st 3 columns, like some sort of pivoting but not exactly.
我想将最后3列的值放在第1 3列的下面,就像某种类型的旋转,但不完全一样。
First Name 1 Middle Name 1 Last Name 1 First Name 2 Middle Name 2 Last Name 2
ABC DAF XYZ LOU NaN XYZ
I am unable to understand how to do it. 我不知道该怎么做。 I only need 1st 3 columns existing after this operation.
此操作后,我只需要存在1st 3列。 Any help would be certainly appreciated.
任何帮助将不胜感激。
Use rsplit
for MultiIndex
and then reshape by stack
, last reset_index
: 将
rsplit
用于MultiIndex
,然后通过stack
进行重塑,最后一次reset_index
:
df.columns = df.columns.str.rsplit(n=1, expand=True)
print (df)
First Name Middle Name Last Name First Name Middle Name Last Name
1 1 1 2 2 2
0 ABC DAF XYZ LOU NaN XYZ
df = df.stack().reset_index(drop=True)
print (df)
First Name Last Name Middle Name
0 ABC XYZ DAF
1 LOU XYZ NaN
Another solution with undocumented function lreshape
: 具有未记录功能
lreshape
另一个解决方案:
d = {'First Name':df.columns[df.columns.str.startswith('First Name')],
'Middle Name':df.columns[df.columns.str.startswith('Middle Name')],
'Last Name':df.columns[df.columns.str.startswith('Last Name')]}
df = pd.lreshape(df, d, dropna=False)
print (df)
Middle Name First Name Last Name
0 DAF ABC XYZ
1 NaN LOU XYZ
You can use the dataframe construtor and values reshape ie 您可以使用数据框构造器和值重塑即
ndf = pd.DataFrame(df.values.reshape(-1,3),columns=['First Name','Middle Name','Last Name'])
First Name Middle Name Last Name 0 ABC DAF XYZ 1 LOU NaN XYZ
Sample run on multiple row data ie 样本在多行数据上运行,即
First Name 1 Middle Name 1 Last Name 1 First Name 2 Middle Name 2 Last Name 2 0 ABC DAF XYZ LOU NaN XYZ 0 ABC DAF XYZ LOU NaN XYZ
Output : 输出:
First Name Middle Name Last Name 0 ABC DAF XYZ 1 LOU NaN XYZ 2 ABC DAF XYZ 3 LOU NaN XYZ
This is a typically pd.wide_to_long
question , one line code as below : 这是一个典型的
pd.wide_to_long
问题,下面是一行代码:
pd.wide_to_long(df.reset_index(), ["FirstName", "MiddleName","LastName"], i="index", j="year").reset_index(drop=True)
Out[506]:
FirstName MiddleName LastName
0 ABC DAF XYZ
1 ABC DAF XYZ
2 LOU NaN XYZ
3 LOU NaN XYZ
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.