如何根據列中的值將 Pandas 資料幀拆分為多個資料幀?
df = pd.DataFrame({'A':[4,5,0,0,5,0,0,4],
'B':[7,8,0,0,4,0,0,0],
'C':[1,3,0,0,7,0,0,0]}, columns = ['A','B','C'])
df["sum"] = df.sum(axis=1)
df["Rolling_sum"] = df["sum"].rolling(2, min_periods=1).sum()
結果資料框是:
A B C sum Rolling_sum
0 4 7 1 12 12.0
1 5 8 3 16 28.0
2 0 0 0 0 16.0
3 0 0 0 0 0.0
4 5 4 7 16 16.0
5 0 0 0 0 16.0
6 0 0 0 0 0.0
7 4 0 0 4 4.0
我想根據Rolling_sum列中 0 的出現將資料幀拆分為多個資料幀。
預期結果:
資料框 1:
A B C sum Rolling_sum
0 4 7 1 12 12.0
1 5 8 3 16 28.0
2 0 0 0 0 16.0
資料框 2:
A B C sum Rolling_sum
4 5 4 7 16 16.0
5 0 0 0 0 16.0
資料框 3:
A B C sum Rolling_sum
7 4 0 0 4 4.0
我不確定我可以使用什么條件來拆分資料幀。
uj5u.com熱心網友回復:
您可以cumsum創建groupby密鑰然后groupby
d = {x : y for x , y in df.loc[df['Rolling_sum'].ne(0)].groupby(df['Rolling_sum'].eq(0).cumsum())}
d
Out[260]:
{0: A B C sum Rolling_sum
0 4 7 1 12 12.0
1 5 8 3 16 28.0
2 0 0 0 0 16.0, 1: A B C sum Rolling_sum
4 5 4 7 16 16.0
5 0 0 0 0 16.0, 2: A B C sum Rolling_sum
7 4 0 0 4 4.0}
uj5u.com熱心網友回復:
np.split
要保留分隔符行,只需split直接在這些行上:
np.split(df, df.index[df['Rolling_sum'] == 0])
# [ A B C sum Rolling_sum
# 0 4 7 1 12 12.0
# 1 5 8 3 16 28.0
# 2 0 0 0 0 16.0,
#
# A B C sum Rolling_sum
# 3 0 0 0 0 0.0
# 4 5 4 7 16 16.0
# 5 0 0 0 0 16.0,
#
# A B C sum Rolling_sum
# 6 0 0 0 0 0.0
# 7 4 0 0 4 4.0]
要忽略分隔符行,請調整切割點以解決缺失的行:
cuts = df.index[df['Rolling_sum'] == 0] # [3, 6]
cuts -= range(len(cuts)) # [3, 5]
np.split(df[df['Rolling_sum'] != 0], cuts)
# [ A B C sum Rolling_sum
# 0 4 7 1 12 12.0
# 1 5 8 3 16 28.0
# 2 0 0 0 0 16.0,
#
# A B C sum Rolling_sum
# 4 5 4 7 16 16.0
# 5 0 0 0 0 16.0,
#
# A B C sum Rolling_sum
# 7 4 0 0 4 4.0]
- 請注意,
df.index[df['Rolling_sum'] == 0]假設您有一個默認范圍索引 - 如果您有自定義索引,請
np.where(df['Rolling_sum'] == 0)[0]改用
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360926.html
