将新记录添加到数据框中,以获取从同一数据框中提取的变量

我正在尝试将变量整合到数据集中。 我有这样的东西:

import pandas as pd
import numpy as np


data = np.array([[160,90,'skirt_trousers','tight_comfy'],[180,100,'trousers_skirt','long_short']])
dford = pd.DataFrame(data,columns = ['height','size','order','preference'])

将新记录添加到数据框中,以获取从同一数据框中提取的变量

并且正在尝试将其添加到类似这样的地方:

dataForTarget = np.array([['o1',160,'skirt','tight'],['o2',180,'trousers','long'],['o1','comfy'],'short']])
Targetdford = pd.DataFrame(dataForTarget,columns = ['orderID','height','preference'])

将新记录添加到数据框中,以获取从同一数据框中提取的变量

第一步,我从字符串中提取了尽可能多的数据, 然后清洗它们:

variables = dford.columns.tolist()
variables.append('ord1')
secondord = dford.order.str.extractall (r'_(.*)')
secondord = secondord.unstack()
secondord.columns = secondord.columns.droplevel()
dford1 = dford.join(secondord)
dford1. columns = variables
dford1.order = dford1.order.str.replace(r'(_.*)','')


variables = dford1.columns.tolist()
variables.append('pref1')
secondpref = dford.preference.str.extractall (r'_(.*)')
secondpref = secondpref.unstack()
secondpref.columns = secondpref.columns.droplevel()
dford2 = dford1.join(secondpref)
dford2. columns = variables
dford2.order = dford2.order.str.replace(r'(_.*)','')

哪个让我在这里:

将新记录添加到数据框中,以获取从同一数据框中提取的变量

在此阶段,我不知如何添加这些新信息作为观察值(成行)。

我能想出的最好的方法是,但是由于索引包含 重复的条目。但是,即使它没有失败,我怀疑它会 仅在我尝试填写缺失值时有用。

但是我无处可去。

dford3 = dford2.rename(columns = {'ord1': 'order','pref1': 'preference'})
dford3= dford3.stack()
dford3= dford3.unstack()
wang0707 回答:将新记录添加到数据框中,以获取从同一数据框中提取的变量

Series.str.splitDataFrame.stackconcat一起用于新的DataFrame,并通过DataFrame.join添加到原始数据中:

df = pd.concat([dford.pop('order').str.split('_',expand=True).stack().rename('order'),dford.pop('preference').str.split('_',expand=True).stack().rename('preference')],axis=1)


dford = (dford.join(df.reset_index(level=1)).rename_axis('orderID')
              .reset_index()
              .sort_values(['level_1','orderID'])
              .drop('level_1',1)
              .reset_index(drop=True)
              .assign(orderID = lambda x: 'o' + x['orderID'].add(1).astype('str')))

print (dford)
  orderID height size     order preference
0      o1    160   90     skirt      tight
1      o2    180  100  trousers       long
2      o1    160   90  trousers      comfy
3      o2    180  100     skirt      short
,

使用DataFrame.apply + Series.str.split。 用pd.concat连接结果数据帧,并使用Series.map创建HightSize系列:

df=pd.concat([df.T for df in dford[['order','preference']].apply(lambda x: x.str.split('_',expand=True),axis=1)]).rename_axis(index='OrderID').reset_index() 

df['height']=df['OrderID'].map(dford['height'])
df['size']=df['OrderID'].map(dford['size'])
print(df)

   OrderID     order preference height size
0        0     skirt      tight    160   90
1        1  trousers      comfy    180  100
2        0  trousers       long    160   90
3        1     skirt      short    180  100

最后在OrderID列中添加一个,并添加字符o

df['OrderID']='o'+df['OrderID'].add(1).astype('str')
print(df)

  OrderID     order preference height size
0      o1     skirt      tight    160   90
1      o2  trousers      comfy    180  100
2      o1  trousers       long    160   90
3      o2     skirt      short    180  100
本文链接:https://www.f2er.com/3144337.html

大家都在问