gpt4 book ai didi

python - Pandas.Series.unstack() 会影响数据类型吗?

转载 作者:行者123 更新时间:2023-11-30 22:53:38 25 4
gpt4 key购买 nike

我正在开发一个包含混合类型值(timedeltas 和 int)的 MultiIndex 系列:

char   
7 a 103 minutes
s 63
9 a 129 minutes
s 211
10 a 106 minutes
s 63
Name: timestamp, dtype: object

索引:

MultiIndex(levels=[[7, 9, 10], ['a', 's']],
labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
names=['char', None])

当我尝试使用pandas.Series.unstack()对其进行取消堆叠时,它将所有值转换为时间增量(具有不同的精度):

    a           s
char
7 01:43:00 00:00:00.000000
9 02:09:00 00:00:00.000000
10 01:46:00 00:00:00.000000

谁知道这是从哪里来的?

编辑

这里有更多信息。原始数据样本:

    timestamp           char
0 2008-01-15 23:56:52 7
1 2008-01-16 00:07:28 7
2 2008-01-01 16:12:32 9
3 2008-01-03 01:52:08 9
4 2008-07-06 17:23:25 10
5 2008-07-06 17:33:47 10

我提取了一些特征:

def get_session(ts):
ts = ts.sort_index()
dt = (ts - ts.shift()).fillna(0)
first_logs = dt > '30m'
sessions = first_logs.cumsum() + 1
duration = sessions.value_counts().mean() * np.timedelta64(10, 'm')
return pd.Series({'s': max(sessions), 'a': duration})

timetable = data.groupby('char')[' timestamp'].apply(get_session)

这给了我:

char   
7 a 20 minutes
s 1
9 a 10 minutes
s 2
10 a 20 minutes
s 1
Name: timestamp, dtype: object

拆开后的样子:

timetable.unstack()

a s
char
7 00:20:00 00:00:00.000000
9 00:10:00 00:00:00.000000
10 00:20:00 00:00:00.000000

最佳答案

看起来像错误。

我认为你可以从函数 DataFrame 返回,然后 unstack 就没有必要了:

def get_session(ts):
ts = ts.sort_index()
dt = (ts - ts.shift()).fillna(0)
first_logs = dt > '30m'
sessions = first_logs.cumsum() + 1
duration = sessions.value_counts().mean() * np.timedelta64(10, 'm')
return pd.DataFrame({'s': max(sessions), 'a': duration}, index=[0])

timetable = data.groupby('char')['timestamp'].apply(get_session)
print (timetable)
a s
char
7 0 00:20:00 1
9 0 00:10:00 2
10 0 00:20:00 1

但是索引有问题(二级都是0),所以可以从s列创建索引,然后设置索引name 通过rename_axis (pandas 0.18.0 中的新功能):

def get_session(ts):
ts = ts.sort_index()
dt = (ts - ts.shift()).fillna(0)
first_logs = dt > '30m'
sessions = first_logs.cumsum() + 1
duration = sessions.value_counts().mean() * np.timedelta64(10, 'm')
return pd.DataFrame({'a': duration}, index=[max(sessions)]).rename_axis('s')

timetable = data.groupby('char')['timestamp'].apply(get_session)
print (timetable)
a
char s
7 1 00:20:00
9 2 00:10:00
10 1 00:20:00

关于python - Pandas.Series.unstack() 会影响数据类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38140025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com