Python:根据数字序列拆分DataFrame

时间:2019-02-21 00:48:04

标签: python pandas dataframe sequence

我正在搜索一种基于Python的实现,该实现基于一列中的多个预定义数字序列(在此示例中为state)来拆分pandas DataFrame。

示例:

sequence_1 = [4, 1, 5, 2]
sequence_2 = [3, 0]
test_data = pd.DataFrame({'state': [4, 1, 5, 2, 4, 1, 5, 2, 3, 0, 4, 1, 5, 2, 3, 0],
                      'output': [1, 1, 0, 1, 1, 3, 1, 1, 3, 2, 2, 2, 2, 0, 0, 0]})

所需的输出: 分成

0 4 1
1 1 1
2 5 0
3 2 1

4 4 1
5 1 3
6 5 1
7 2 1

8 3 3
9 0 2

以此类推。

只要它保留索引和其他值,我就不必担心输出格式。我看了一下pandas.DataFrame.groupby,但没有任何运气。我也尝试过isin,但是它需要按顺序匹配所有特定值并显示所有值。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

如果state中的数据井井有条(如您的示例中所示)的一种快速方法是仅捕获两个序列的第一个元素,然后捕获cumsum中的groupby,例如:

for name_g, df_g in test_data.groupby(((test_data.state == sequence_1[0])| 
                                       (test_data.state == sequence_2[0]) ).cumsum()):
    print (df_g)

另一种通用方法是使用shift检查序列是否正确,然后以list的形式获取数据帧,例如:

ser_seq1 = np.array([test_data.state.shift(-i) == val 
                     for i, val in enumerate(sequence_1)]).all(0)
list_df_seq1 = [test_data.loc[i:i+len(sequence_1)] 
                for i in test_data.index[ser_seq1]]

sequence_2

相同