我有一個熊貓資料框,看起來像這樣
A BB
1 foo.bar
2 foo.bar
3 foo.foo
4 foo.bar
5 foo.bar
6 foo.foo
我基本上希望根據此串列串列從中獲取兩個資料框:
[[False, False, True], [False, False, True]]
輸出應該是:
df1:
A BB
1 foo.bar
2 foo.bar
3 foo.foo
df2
A BB
4 foo.bar
5 foo.bar
6 foo.foo
uj5u.com熱心網友回復:
麻木:
flatnonzero查找'foo.foo'行的位置split相應地劃分資料框
import numpy as np
np.split(df, np.flatnonzero(df.BB.eq('foo.foo'))[:-1] 1)
[ A BB
0 1 foo.bar
1 2 foo.bar
2 3 foo.foo,
A BB
3 4 foo.bar
4 5 foo.bar
5 6 foo.foo]
解決@mozway 的評論
list(filter(
lambda d: not d.empty,
np.split(df, np.flatnonzero(df.BB.eq('foo.foo')) 1)
))
[ A BB
0 1 foo.bar
1 2 foo.bar
2 3 foo.foo,
A BB
3 4 foo.bar
4 5 foo.bar
5 6 foo.foo]
uj5u.com熱心網友回復:
你可以
- 獲取
df.BB等于的行'foo.foo' - 將其移動一排
- 對其應用累積和
- 按結果索引分組。
您最終會得到一個groupby物件,您可以將其轉換為子 dfs 串列。
>>> groups = df.groupby(df.BB.eq('foo.foo').shift(fill_value=0).cumsum())
>>> frames = [frame for _, frame in groups]
>>> frames # list of sub-dfs
[ A BB
0 1 foo.bar
1 2 foo.bar
2 3 foo.foo,
A BB
3 4 foo.bar
4 5 foo.bar
5 6 foo.foo]
uj5u.com熱心網友回復:
是否如您所愿:
m = len(df) // 2
df1, df2 = df.iloc[:m], df.iloc[m:]
輸出:
>>> df1
A BB
0 1 foo.bar
1 2 foo.bar
2 3 foo.foo
>>> df2
A BB
3 4 foo.bar
4 5 foo.bar
5 6 foo.foo
或使用np.split
df1, df2 = np.split(df, 2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453890.html
下一篇:如何根據字串匹配進行拆分?
