首页 > 解决方案 > 如何使用条件遍历 DataFrame 以重新组织我的数据?

问题描述

我有一个以下格式的 DataFrame,我想使用其中一列数据根据条件重新排列它。

我当前的 DataFrame 具有以下格式:

df.head()

Room    Temp1    Temp2    Temp3    Temp4
 R1       1        2        1        3
 R1       2        3        2        4
 R1       3        4        3        5

 R2       1        1        2        2
 R2       2        2        3        3
 ...
 R15      1        1        1        1

我想“旋转”这个 DataFrame 看起来像这样:

Room 
 R1 = [1, 2, 3, 2, 3, 4, 1, 2, 3, 3, 4, 5]
 R2 = [1, 2, 1, 2, 2, 3, 2, 3]
 ...
 R15 = [1, 1, 1, 1,]

 Where:
  R1 = Temp1 + Temp2 + Temp3

 So that:
  R1 = [1, 2, 3, 2, 3, 4, 1, 2, 3, 3, 4, 5]

首先:我尝试使用“where”条件创建每列的列表,其中 Room = 'R1'

room1 = np.where(df["Room"] == 'R1', df["Temp1"], 0).tolist()

它有效,但我需要为每一列单独执行此操作,其中在我的其他数据集中有超过 4 个。

第二:我试图遍历它们:

i = ['Temp1', 'Temp2', 'Temp3', 'Temp4']
room1= []

for i in df[i]:
    for row in df["Room"]:
        while row == "R1":

...这就是我迷路的地方。我接下来要去哪里?如何遍历其余列并最终得到上面的 DataFrame?

标签: python-3.xlistloopsdataframe

解决方案


这应该可以工作(尽管它不是很有效并且在大 DataFrame 上会很慢):

results = {}  # dict to store results
cols = ['Temp1', 'Temp2', 'Temp3', 'Temp4']
for r in df['Room'].unique():
    room_list = []
    sub_frame = df[df['Room'] == r]
    for col in cols:
        sub_col = sub_frame[col]
        for val in sub_col:
            room_list.append(val)
    results[r] = room_list

结果将存储在结果字典中,因此您可以使用以下命令访问 R1:

results['R1']

通常迭代 DataFrames 是一个坏主意,但我确信有更好的解决方案!


推荐阅读