我有以下有关运输方式和时间的数据。当值不是列表中的特定值时,我想交换“模式”和“时间”列中的值。例如,在所示的图像中(单击下面的链接),我想将具有“ 10分钟”的单元格移到“时间”列中,并将“时间”列中的这些值交换为“模式”列。
我已经尝试了多种方法,包括np.where函数,但是我无法弄清楚。所以我已经确定了for循环。见下文。
newdtf = pd.DataFrame()
for value in transport2['mode'].unique():
mylist = ["Dala-dala", "Boda-boda", "Walk", "Private vehicle",
"Bicycle", "BRT", "Bajaj", "Traffic", "Uber"]
if value in mylist:
continue
else:
tempdtf=pd.DataFrame({'hhid': transport2.loc[transport2.time == mode, 'hhid'],
'mode': transport2.loc[transport2.time == mode, 'mode'],
'time': mode})
#Join
newdtf = newdtf.append(tempdtf)
但是,newdtf无法呈现我想要的结果。
答案 0 :(得分:0)
首先,我重新创建您的数据框。如果您在stackoverflow中提问时执行了此步骤,则对以后的问题很有帮助。
df = pd.DataFrame({'mode':['Dala-dala','Dala-dala','Dala-dala','Dala-dala','Dala-dala', '10 minutes', '10 minutes', 'Dala-dala', 'Private vehicle', 'Private vehicle'],
'time':['30 minutes', '20 minutes', '20 minutes', '2 hours 30 minutes', '10 minutes', 'Walk', 'Walk', '60 minutes', '3 hours', '2 hours 30 minutes']})
mylist = ["Dala-dala", "Boda-boda", "Walk", "Private vehicle",
"Bicycle", "BRT", "Bajaj", "Traffic", "Uber"]
接下来,我们将创建一个新的临时列,以保存在列表中过滤的“模式”值。
df['mode_temp']= df[~df['mode'].isin(mylist)]['mode']
接下来,我们过滤数据帧中的mode_temp中的值,然后使“ mode”等于“ time”。
df['mode'][df['mode_temp'].notnull()]= df['time']
重复并使“时间”等于“模式”。
df['time'][df['mode_temp'].notnull()]= df['mode_temp']
删除临时列。
df = df[['mode', 'time']]
df
mode time
0 Dala-dala 30 minutes
1 Dala-dala 20 minutes
2 Dala-dala 20 minutes
3 Dala-dala 2 hours 30 minutes
4 Dala-dala 10 minutes
5 Walk 10 minutes
6 Walk 10 minutes
7 Dala-dala 60 minutes
8 Private vehicle 3 hours
9 Private vehicle 2 hours 30 minutes
总的代码看起来像这样:
df = pd.DataFrame({'mode':['Dala-dala','Dala-dala','Dala-dala','Dala-dala','Dala-dala', '10 minutes', '10 minutes', 'Dala-dala', 'Private vehicle', 'Private vehicle'],
'time':['30 minutes', '20 minutes', '20 minutes', '2 hours 30 minutes', '10 minutes', 'Walk', 'Walk', '60 minutes', '3 hours', '2 hours 30 minutes']})
mylist = ["Dala-dala", "Boda-boda", "Walk", "Private vehicle",
"Bicycle", "BRT", "Bajaj", "Traffic", "Uber"]
df['mode_temp']= df[~df['mode'].isin(mylist)]['mode']
df['mode'][df['mode_temp'].notnull()]= df['time']
df['time'][df['mode_temp'].notnull()]= df['mode_temp']
df = df[['mode', 'time']]