假设我有一个包含两列的pandas数据帧:ID和Days.DataFrame在两个变量中按升序排序.例如:
# Initial dataset
data = pd.DataFrame({'id': np.repeat([1, 2 ,3], 4),
'day': [1, 2, 10, 11, 3, 4, 12, 15, 1, 20, 21, 24]})
id day
0 1 1
1 1 2
2 1 10
3 1 11
4 2 3
5 2 4
6 2 12
7 2 15
8 3 1
9 3 20
10 3 21
11 3 24
Run Code Online (Sandbox Code Playgroud)
我想添加第三列,它会为每个ID*日提供一个"会话"号."会话"是指在一个会话期间之间差异小于2天的一系列天数.例如,序列5,6,7将被视为一个会话,而5,6,9将被视为两个会话,并且应该被标记为0, 0, 1,即第5天和第6天被引用到会话#0,而第9天被引用到会话#1.会话编号应该从0每个新ID开始.
换句话说,我想得到的是:
id day session
0 1 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 pandas DataFrame 创建默认字典,但是 to_dict() 方法在我想要写入的列的值周围创建了不需要的方括号。示例代码如下:
# Create DF
my_df = pd.DataFrame({'numbers': (1, 2, 3, 4, 5), 'letters': ('a', 'b', 'c', 'd', 'e')})
# Create dictionary from the DF
my_dict = my_df.set_index('numbers').T.to_dict('list')
# Create collections dictionary
my_collections_dict = collections.defaultdict(int, my_dict)
Run Code Online (Sandbox Code Playgroud)
结果是:
defaultdict(int, {1: ['a'], 2: ['b'], 3: ['c'], 4: ['d'], 5: ['e']})
Run Code Online (Sandbox Code Playgroud)
我想要的是:
defaultdict(int, {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
Run Code Online (Sandbox Code Playgroud)
如何获取“纯”列值?