我现在正在处理工作区中的非数字数据。
我想在pandas Dataframe中合并两行;我首先通过df [col] .apply(set)从df中解析了Series以获得
original series = pd.Series([(a,b,c), (d,e,f), (g,h,i), ...])
现在我必须做
new series = pd.Series([(a,b,c,d,e,f), (d,e,f,g,h,i), (g,h,i,j,k,l), ...])
形状。
对于数字数据,我使用X [:-1] + X [1:]
但是我现在完全不知道
因为
我怎么能得到它?
答案 0 :(得分:0)
尝试pd.DataFrame.shift()
:
se = pd.Series([('a','b','c'), ('d','e','f'), ('g','h','i')])
se = (se.shift()+se).drop(0)
答案 1 :(得分:0)
您可以:
[:-1]
)。执行此操作的代码是:
result = (orig_ser + orig_ser.shift(-1))[:-1]
(没有中间的 DataFrame )。
对于源数据:
0 (a, b, c)
1 (d, e, f)
2 (g, h, i)
3 (k, l, m)
dtype: object
我知道了
0 (a, b, c, d, e, f)
1 (d, e, f, g, h, i)
2 (g, h, i, k, l, m)
dtype: object
如果您的系列包含 set 个对象(而不是元组)
让我们将测试 Series 创建为:
orig_ser = pd.Series([ set(['a','b','c']), set(['d','e','f']),
set(['g','h','i']), set(['k','l','m']) ],
index=['2020-02-01 12:00', '2020-02-01 13:00', '2020-02-01 14:00', '2020-02-01 15:00'])
(以日期字符串作为索引,如您在注释中所写)。
然后,以原始索引加入您的方式,运行:
result = pd.Series(orig_ser.values[:-1] | orig_ser.values[1:],
index=orig_ser.index[:-1]).apply(sorted)
结果是:
2020-02-01 12:00 [a, b, c, d, e, f]
2020-02-01 13:00 [d, e, f, g, h, i]
2020-02-01 14:00 [g, h, i, k, l, m]
dtype: object
如您所见,由于应用了 sorted 函数,我什至得到了 每个元素按顺序排列,但现在每个元素都是一个列表而不是 set 。 如果您不希望使用此功能,请删除 .apply(已排序),然后分别删除 结果元素只需进行设置,而无需进行任何特殊排序。
答案 2 :(得分:0)
se[0:-1]+se[1:].reset_index(drop=True)
se[0:-1].add(se[1:].reset_index(drop=True))
se[0:-1].combine(se[1:].reset_index(drop=True), lambda x, y: x+y)
答案 3 :(得分:0)
使用concat()函数合并两个Series