Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建以另一数据帧中的值命名的数据帧_Python - Fatal编程技术网

Python 创建以另一数据帧中的值命名的数据帧

Python 创建以另一数据帧中的值命名的数据帧,python,Python,我有一个包含三列的数据框,而col_1和col_2包含一些任意数据: data = {"Height": range(1, 20, 1), "Col_1": range(2, 40, 2), "Col_2": range(3, 60, 3)} df = pd.DataFrame(data) Height Col_1 Col_2 0 1 2 3 1 2 4

我有一个包含三列的数据框,而col_1和col_2包含一些任意数据:

data = {"Height": range(1, 20, 1), "Col_1": range(2, 40, 2), "Col_2": range(3, 60, 3)}
df = pd.DataFrame(data)

    Height  Col_1  Col_2
0        1      2      3
1        2      4      6
2        3      6      9
3        4      8     12
4        5     10     15
5        6     12     18
6        7     14     21
7        8     16     24
8        9     18     27
9       10     20     30
10      11     22     33
11      12     24     36
12      13     26     39
13      14     28     42
14      15     30     45
15      16     32     48
16      17     34     51
17      18     36     54
18      19     38     57

以及另一个包含高度值的数据框,该数据框应用于从df中分割高度列

data_segments = {"Section Height" : [1, 10, 20]}
df_segments = pd.DataFrame(data_segments)

   Section Height
0               1
1              10
2              20
我想创建两个新的数据帧,df_段_0包含初始df的所有列,但仅用于df_段中前两个索引内的高度行。df_段_1应采用相同的方法。它们应该看起来像:

df_segment_0
   Height  Col_1  Col_2
0       1      2      3
1       2      4      6
2       3      6      9
3       4      8     12
4       5     10     15
5       6     12     18
6       7     14     21
7       8     16     24
8       9     18     27

df_segment_1
    Height  Col_1  Col_2
9       10     20     30
10      11     22     33
11      12     24     36
12      13     26     39
13      14     28     42
14      15     30     45
15      16     32     48
16      17     34     51
17      18     36     54
18      19     38     57
我使用.loc方法尝试了以下代码,并添加了C Hecht创建数据帧列表的建议:

df_segment_list = []
    
try:
    for index in df_segments.index:            
        df_segment = df[["Height", "Col_1", "Col_2"]].loc[(df["Height"] >= df_segments["Section Height"][index]) & (df["Height"] < df_segments["Section Height"][index + 1])]
        df_segment_list.append(df_segment)
except KeyError:
    pass
但是,我希望自动命名最终数据帧。我试过:

for i in range(0, len(df_segment_list)):
    name = "df_segment_" + str(i)
    name = df_segment_list[i]
我希望这段代码能够简单地自动化df_段_0=df_段_列表[0],相反,我收到一个错误名称“df_段_0”未定义

我需要单独数据帧的原因是,我将使用Col_1和Col_2执行许多后续操作,因此我需要对它们中的每一个进行行访问,例如:

df_segment_0 = df_segment_0 .assign(col_3 = df_segment_0 ["Col_1"] / df_segment_0 ["Col_2"])
我如何做到这一点


编辑1:用C Hecht的建议澄清问题。

不幸的是,我不能100%理解您的想法,但我希望以下内容能帮助您找到答案:

作为pd进口熊猫 将numpy作为np导入 数据帧{'Section Height':[20,90,111,232,252,3383,3768,3826,3947,4100],'df_names':[f'df_Section_{i}表示范围10中的i]} df['shift']=df['Section Height'].shift-1 新的_dfs=[] 对于索引,df.iterrows中的行: 如果np.isnanrow['Shift']: 不知道你想在这里做什么 通过 其他: new_df=pd.DataFrame{'heights':[i在rangeintrow['Section heights']中表示i,introw['shifted']] new_df.name=行['df_name'] 新建_dfs.appendnew_df 新的_dfs的内容是如下所示的数据帧:

    heights
0        20
1        21
2        22
3        23
4        24
..      ...
65       85
66       86
67       87
68       88
69       89
[70 rows x 1 columns]
如果你澄清了你的问题,我们会一直帮助你,但希望这能为你指明正确的方向


编辑:关于使用df.name的一个小注释:这不是很稳定,如果你做了诸如删除列、酸洗/取消酸洗等事情,名称可能会丢失。但是,您确实可以根据需要找到一个很好的解决方案来维护名称。

如果您想在分段数据框中获取所有小于当前分段高度的条目,请执行以下操作:

作为pd进口熊猫 df1=pd.DataFrame{Height:range1,20,1,Col_1:range2,40,2,Col_2:range3,60,3} df_segments=pd.DataFrame{Section Height:[1,10,20]} def段数据帧数据帧:pd.DataFrame,段计划:pd.DataFrame: df=数据\u frame.copy制作安全拷贝,因为我们对df进行了变异!!! 对于分段平面图[截面高度]中的sh:sh是新的最大高度 df_new=df[df[Height] 对于段数据帧DF1中的段,df段: 用分段填充
如果要跟踪并命名各个帧,可以使用

的确,我得到了一个数据帧列表,但它们没有正确分开,如我编辑的问题所示。此外,如果我尝试打印出例如df_section_7,则会报告相同的错误,即没有定义df_section_7。顺便说一句,我的问题哪一部分不清楚?print语句需要引用已定义的对象。您可以执行printnew_dfs[0]来创建第一个df。Python不知道df_section_7是什么,因为它不是一个对象。你说的正确分离是什么意思?请澄清提供预期结果的含义。那么,我将如何定义名为df_section_0到df_section_8的数据帧对象?我的初始代码中的错误似乎仍然存在,因为我设法将数据帧分割为段,但每个段都没有保存为数据帧对象,以后可以使用。希望这更有意义?每个数据帧都保存为列表new_dfs中的一个对象。您也可以通过将new_dfs=[]更改为new_dfs={}和new_dfs来制作dict。将new_df添加到new_dfs[row['df_names']]=new_df,允许您按名称调用它们:printnew_dfs['df_section_7']。我按照您建议的方式访问了创建的数据帧。但是,我想自动化整个过程,而无需单独命名每个段,因为在将来,seg的数量会增加 具体情况可能会有所不同。我更新了我的问题,以便更好地澄清问题。你知道我怎样才能做到这一点吗?
    heights
0        20
1        21
2        22
3        23
4        24
..      ...
65       85
66       86
67       87
68       88
69       89
[70 rows x 1 columns]