我正在搜索一种基于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
,但是它需要按顺序匹配所有特定值并显示所有值。
任何帮助将不胜感激!
答案 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