![](/img/trans.png)
[英]Split data frame into multiple data frames based on unique column combinations
[英]Splitting data frame into smaller data frames based on unique column values
這是我的數據框:
Quantity Code Value
0 1757 08951201 717.0
1 1100 08A85800 0.0
2 2500 08A85800 0.0
3 323 08951201 0.0
4 800 08A85800 0.0
我如何將其拆分為基於代碼列創建的較小數據框。 (例如,這個應該分成帶有所有 08951201 代碼的 df1 和帶有 08A85800 的 df2)
編輯:我很想有一種方法將它們合並回原始 dataframe 在我將執行一些價值計算之后以相同的順序。
使用groupby
並應用您的自定義 function 來處理您的子 dataframe:
groups = df.groupby('Code')
print(list(groups))
# Output:
[('08951201', Quantity Code Value
0 1757 08951201 717.0
3 323 08951201 0.0),
('08A85800', Quantity Code Value
1 1100 08A85800 0.0
2 2500 08A85800 0.0
4 800 08A85800 0.0)]
現在假設您想按Value
sum
:
>>> df.groupby('Code')['Value'].sum()
Code
08951201 717.0
08A85800 0.0
Name: Value, dtype: float64
正如建議的那樣,您可以在 dataframe 上使用groupby()
以按一列名稱值分隔:
import pandas as pd
cols = ['Quantity', 'Code', 'Value']
data = [[1757, '08951201', 717.0],
[1100, '08A85800', 0.0],
[2500, '08A85800', 0.0],
[323, '08951201', 0.0],
[800, '08A85800', 0.0]]
df = pd.DataFrame(data, columns=cols)
groups =df.groupby(['Code'])
然后您可以通過groups.indices
恢復索引,這將返回一個以“代碼”值作為鍵,索引作為值的字典。 最后,如果您想獲取每個子數據幀,您可以調用group_list = list(groups)
。 我建議分兩步完成工作(首先分組,然后調用列表),因為這樣您可以通過 groupDataframe ( group
)調用其他方法
編輯
然后,如果你想要一個特定的 dataframe 你可以打電話
df_i = group_list[i][1]
group_list[i]
是子數據幀的第 i 個元素,但它是一個包含(group_val,group_df)
的元組。 其中group_val
是與這個新的 dataframe( '08951201'
或'08A85800'
)關聯的值, group_df
是新的 dataframe。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.