我有一个温度为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/