如何在熊猫系列中合并2行?

时间:2020-09-23 08:56:51

标签: python pandas dataframe

我现在正在处理工作区中的非数字数据。

我想在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:]

但是我现在完全不知道

因为

  1. 原始系列的索引实际上是iso格式的字符串时间->数字索引将无济于事
  2. 数据格式为'set'->不能使用'+'操作数

我怎么能得到它?

4 个答案:

答案 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)

您可以:

  • 将原始的 Series “添加”到相同的 Series ,但是转移了 一个地方下来(如果添加元组实际上是一个 串联),
  • 获取结果的所有元素,但最后一个([:-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

  • pd.concat([original_series,new_series])
相关问题