我正在编写一个字典,它必须根据在列表calvo_massflows中重复的某个项目将数据框拆分为多个小数据框。如果条目不重复,它将在字典中形成一个列表。在第二个for循环中,如果键(l)和键(e)相同,字典将把df数据帧中的索引项添加到其中一个字典列表中。
这是我目前得到的:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from scipy.stats import linregress
from scipy.optimize import curve_fit
calvo_massflow = [1, 2, 1, 2, 2, 1, 1]
df = pd.DataFrame({"a":[1, 2, 3, 4, 11, 2, 4, 6, 7, 3],
"b":[5, 6, 7, 8, 10, 44, 23, 267, 4, 66]})
dic = {}
massflows = []
for i, e in enumerate(calvo_massflow):
if e not in massflows:
massflows.append(e)
dic[e] = []
for l in dic:
if e == l:
dic[e].append(pd.DataFrame([df.iloc[i]]))
输出的问题是每个索引都是字典中单独的数据帧。我想把所有的数据框合并起来。我试着用pd.concat做点什么。但我不明白。此外,字典中的章节(如果您这样称呼它们的话)是列表,我更喜欢它们是数据帧。但是,如果我像下面这样将列表更改为数据帧:
dic3 = {}
massflows = []
for i, e in enumerate(calvo_massflow):
if e not in massflows:
massflows.append(e)
dic3[e] = pd.DataFrame([])
for l in dic3:
if e == l:
dic3[e].append(df.iloc[i])
我似乎无法在字典生成的数据框中添加数据框。
我的理想场景是一个包含两个数据帧的字典。一个键为'1',另一个键为'2'。这两个数据帧都包含来自数据帧df的所有信息。而不是现在每个索引都有单独的数据框架。最好数据帧不像现在这样在列表中,但这不会是一个灾难。
让我知道如果你们可以帮助我或需要更多的背景!
如果您想选择df
到calvo_massflow
长度的行,按calvo_massflow分组并转换为dict。这可能看起来像这样:
calvo_massflow = [1, 2, 1, 2, 2, 1, 1]
df = pd.DataFrame({"a":[1, 2, 3, 4, 11, 2, 4, 6, 7, 3],
"b":[5, 6, 7, 8, 10, 44, 23, 267, 4, 66]})
dic = dict(iter(df.iloc[:len(calvo_massflow)]
.groupby(calvo_massflow)))
print(dic)
导致一个包含键1和2的字典,其中包含两个经过过滤的dataframe:
{1: a b
0 1 5
2 3 7
5 2 44
6 4 23,
2: a b
1 2 6
3 4 8
4 11 10}