[英]Python dataframe - data values from 3 columns to be mapped under other 3 columns
Python专家,我需要一些帮助来理解如何重塑或旋转Pandas数据框的列。 以下是我要执行的操作,遇到一种情况,我有6列First_name1,middle_name1,last_name1,first_name2,middle_name2和last_name2。 我想将最后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
我不知道该怎么做。 此操作后,我只需要存在1st 3列。 任何帮助将不胜感激。
将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
具有未记录功能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
您可以使用数据框构造器和值重塑即
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
样本在多行数据上运行,即
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
输出:
First Name Middle Name Last Name 0 ABC DAF XYZ 1 LOU NaN XYZ 2 ABC DAF XYZ 3 LOU NaN XYZ
这是一个典型的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.