我有一个温度为1000的行(时间序列数据)和40列(集水量为40点)的DataFrame。此DataFrame中的条目为零和1(1表示流域的活动部分,零表示非活动部分)。我想将多个相交值放置在同一DataFrame的单独列(名为inter)中。

我希望以这种方式输出[附件图像]


inter的第一行中的值应为零,因为所有条目均为零
并且第一天没有任何活动
inter的第二行中的值应为4,因为有四个部分处于活动状态
在第二天
inter的第三行中的value应该为3(相交的值的数量
以上所有行,包括第三行)[在此处输入图像描述] [1]。
图像中的绿色框显示第三行的值
inter的第4行中的value应该是
以上所有行(图像中的黄色阴影区域)。
同样,蓝色框显示第5行的值,红色框显示
第六行的值,依此类推


注意:对于每一行,我都会计算以上所有行的交点

最佳答案

我为此应该得到奖励:)
这是你的答案:

import pandas as pd
import numpy as np

# setup test data
data = {'0': [0, 0, 0, 1, 0], '1': [0, 0, 1, 0, 1], '2': [0, 0, 0, 1, 0], '3': [0, 0, 1, 1, 1], '4': [0, 1, 1, 1, 0]
, '5': [0, 0, 0, 0, 1], '6': [0, 1, 1, 1, 0], '7': [0, 0, 1, 0, 1], '8': [0, 1, 0, 1, 0], '9': [0, 1, 1, 0, 0],
    '10': [0, 0, 1, 0, 0], '11': [0, 0, 0, 1, 1], '12': [0, 0, 0, 1, 1]}
data = pd.DataFrame(data=data)

# collect inter data
inter_data = []
for main_index, main_row in data.iterrows():

    # select data for calculations
    selected_data = data.loc[0:main_index,:]

    # handle firs row with 0 values
    if not 1 in main_row.values:
        inter_data.append(0)
    else:
        # handle second row
        if selected_data.shape[0] == 2:
          inter_data.append(selected_data[1:2].values[0].sum())
        # handle rest of data
        else:
            # drop last row from selected data
            selected_data = selected_data[:-1]
            # sum selected data
            summed_data = 0
            for index, row in selected_data.iterrows():
                summed_data += row.values

            # get position of 1
            positions = np.where(main_row.values == 1)
            # get summed data based on position
            positions_data = summed_data[positions[0]]
            # sum occurance in data
            inter_data.append((positions_data >= 1).sum())

# add inter data to raw data
data['inter'] = pd.DataFrame(inter_data)


输出:

   0  1  2  3  4  5  6  7  8  9  10  11  12  inder
0  0  0  0  0  0  0  0  0  0  0   0   0   0      0
1  0  0  0  0  1  0  1  0  1  1   0   0   0      4
2  0  1  0  1  1  0  1  1  0  1   1   0   0      3
3  1  0  1  1  1  0  1  0  1  0   0   1   1      4
4  0  1  0  1  0  1  0  1  0  0   0   1   1      5

关于python - 单个DataFrame中多行的交集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56413995/

10-13 06:53