Joh*_*nor 3 python unique slice dataframe pandas
为了可视化,我需要按每个 x 唯一值对长格式 DataFrame 进行切片。我的实际数据集有 20 个个体的约 90 个变量,因此我想分成 9 个单独的 df,其中每个变量包含所有 20 个个体的条目。
我创建了这个简单的示例来帮助解释:
df = pd.DataFrame({'ID':[1,1,1,2,2,2,3,3,3,4,4,4],
'Period':[1,2,3,1,2,3,1,2,3,1,2,3,],
'Food':['Ham','Ham','Ham','Cheese','Cheese','Cheese','Egg','Egg','Egg','Bacon','Bacon','Bacon',]})
df
''' ******* PSUEDOCODE *******
df1 = unique entries [:2]
df2 = unique entries [2:4] '''
# desired outcome:
df1 = pd.DataFrame({'ID':[1,1,1,2,2,2,],
'Period':[1,2,3,1,2,3,],
'Food':['Ham','Ham','Ham','Cheese','Cheese','Cheese',]})
df2 = pd.DataFrame({'ID':[3,3,3,4,4,4],
'Period':[1,2,3,1,2,3,],
'Food':['Egg','Egg','Egg','Bacon','Bacon','Bacon',]})
print(df1)
print(df2)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,DataFrame 将在列中每 2 组唯一条目的末尾进行拆分,df['Food']以创建df1和df2。最好的情况是一个循环,为每个 x 个唯一条目创建一个新的 DataFrame。由于缺乏我能找到的信息,不幸的是我很难为此编写好的伪代码。
让我们尝试使用factorizeandgroupby
n = 2
d = {x : y for x , y in df.groupby(df.Food.factorize()[0]//n)}
d[0]
Out[132]:
ID Period Food
0 1 1 Ham
1 1 2 Ham
2 1 3 Ham
3 2 1 Cheese
4 2 2 Cheese
5 2 3 Cheese
d[1]
Out[133]:
ID Period Food
6 3 1 Egg
7 3 2 Egg
8 3 3 Egg
9 4 1 Bacon
10 4 2 Bacon
11 4 3 Bacon
Run Code Online (Sandbox Code Playgroud)
可能的解决方案如下:
# pip install pandas
import pandas as pd
df = pd.DataFrame({'ID':[1,1,1,2,2,2,3,3,3,4,4,4],
'Period':[1,2,3,1,2,3,1,2,3,1,2,3,],
'Food':['Ham','Ham','Ham','Cheese','Cheese','Cheese','Egg','Egg','Egg','Bacon','Bacon','Bacon',]})
dfs = [y for x, y in df.groupby('Food', as_index=False)]
Run Code Online (Sandbox Code Playgroud)
分离的 dfs 可以通过列表索引(见下文)或使用循环来访问:
dfs[0]
Run Code Online (Sandbox Code Playgroud)
dfs[1]
Run Code Online (Sandbox Code Playgroud)
and etc.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2934 次 |
| 最近记录: |