我有一个如下所示的数据框:
df = pd.DataFrame([
[123, 'abc', '121'],
[123, 'abc', '121'],
[456, 'def', '121'],
[123, 'abc', '122'],
[123, 'abc', '122'],
[456, 'def', '145'],
[456, 'def', '145'],
[456, 'def', '121'],
], columns=['userid', 'name', 'dt'])
从this question开始,我设法调换它。
所以,期望的df将是:
userid1_date1 name_1 name_2 ... name_n
userid1_date2 name_1 name_2 ... name_n
userid2 name_1 name_2 ... name_n
userid3_date1 name_1 name_2 ... name_n
但是,我想根据日期分隔行。例如,如果用户123
在两天内有数据,则每天的api事件行应该是单独的。
转换后我真的不需要userid
,所以无论如何都可以使用它。
我的计划是:
- 将df w.r.t分组到
dt
列- 转动所有组,使每个组看起来像这样:
userid1_date1 name_1 name_2 ... name_n
- 现在,连接数据透视数据
但是,我不知道如何在熊猫中做到这一点!
答案 0 :(得分:0)
尝试:
def tweak(df):
return df.reset_index().name
df.set_index('userid').groupby(level=0).apply(tweak)
df = pd.DataFrame([[1, 'a'], [1, 'c'], [1, 'c'], [1, 'd'], [1, 'e'],
[1, 'a'], [1, 'c'], [1, 'c'], [1, 'd'], [1, 'e'],
[2, 'a'], [2, 'a'], [2, 'c'], [2, 'd'], [2, 'e'],
[2, 'a'], [2, 'a'], [2, 'c'], [2, 'd'], [2, 'e'],
], columns=['userid', 'name'])
def tweak(df):
return df.reset_index().name
df.set_index('userid').groupby(level=0).apply(tweak)