使用python pandas 将具有多行的python数据帧转换为一行? [英] Convert a python dataframe with multiple rows into one row using python pandas?
本文介绍了使用python pandas 将具有多行的python数据帧转换为一行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
具有以下数据框,
df = pd.DataFrame({'device_id' : ['0','0','1','1','2','2'],
'p_food' : [0.2,0.1,0.3,0.5,0.1,0.7],
'p_phone' : [0.8,0.9,0.7,0.5,0.9,0.3]
})
print(df)
输出:
device_id p_food p_phone
0 0 0.2 0.8
1 0 0.1 0.9
2 1 0.3 0.7
3 1 0.5 0.5
4 2 0.1 0.9
5 2 0.7 0.3
如何实现这种转变?
df2 = pd.DataFrame({'device_id' : ['0','1','2'],
'p_food_1' : [0.2,0.3,0.1],
'p_food_2' : [0.1,0.5,0.7],
'p_phone_1' : [0.8,0.7,0.9],
'p_phone_2' : [0.9,0.5,0.3]
})
print(df2)
输出:
device_id p_food_1 p_food_2 p_phone_1 p_phone_2
0 0 0.2 0.1 0.8 0.9
1 1 0.3 0.5 0.7 0.5
2 2 0.1 0.7 0.9 0.3
我尝试使用groupby,apply,agg ...
但是我仍然无法实现这种转变.
I try to achieve it use groupby,apply,agg...
But I still can't achieve this transformation.
更新
我的最终代码:
Update
My final Code:
df.drop_duplicates('device_id', keep='first').merge(df.drop_duplicates('device_id', keep='last'),on='device_id')
我感谢 su79eu7k 和 A-Za-z 的时间和精力.
言语不足以表达我的感激.
I appreciated su79eu7k's and A-Za-z's time and effort.
Words are not enough to express my gratitude.
推荐答案
如果您仍在使用groupby寻找答案
If you are still looking for an answer using groupby
df = df.groupby('device_id')['p_food', 'p_phone'].apply(lambda x: pd.DataFrame(x.values)).unstack().reset_index()
df.columns = df.columns.droplevel()
df.columns = ['device_id','p_food_1', 'p_food_2', 'p_phone_1','p_phone_2']
你得到
device_id p_food_1 p_food_2 p_phone_1 p_phone_2
0 0 0.2 0.1 0.8 0.9
1 1 0.3 0.5 0.7 0.5
2 2 0.1 0.7 0.9 0.3
这篇关于使用python pandas 将具有多行的python数据帧转换为一行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文