簡體   English   中英

根據唯一列值將數據框拆分為更小的數據框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM