我有一个数据框,如下所示
迭代行时遇到问题。对于每个提取的行,我想返回键值。例如,在 2016-08-31 00:00:01 条目的第二行df1& df3的罗盘值为4.0,所以我想返回具有相同罗盘值的键,即df1&在这种情况下df3 我一直在使用
迭代行for index,row in df.iterrows():
答案 0 :(得分:1)
<强>更新强>
好的,现在我更了解你的问题,这对你有用。 首先使用
更改数据框的形状dfs = df.stack().swaplevel(axis=0)
这会使您的数据框看起来像:
然后您可以像以前一样迭代行并提取所需的信息。我只是将打印语句用于所有内容,但您可以将其放在一些更合适的数据结构中。
for index, row in dfs.iterrows():
dup_filter = row.duplicated(keep=False)
dfss = row_tuple[dup_filter].index.values
print("Attribute:", index[0])
print("Index:", index[1])
print("Matches:", dfss, "\n")
将打印出类似
的内容.....
Attribute: compass
Index: 5
Matches: ['df1' 'df3']
Attribute: gyro
Index: 5
Matches: ['df1' 'df3']
Attribute: accel
Index: 6
Matches: ['df1' 'df3']
....
您也可以通过
一次执行一个属性 dfs_compass = df.stack().swaplevel(axis=0).loc['compass']
并使用索引遍历行。
<强>旧强>
如果我正确理解你的问题,即你想要返回列的第二层上具有匹配值的行的索引,即('compass','accel','gyro')。以下将有效。
compass_match_indexes = []
for index, row in df.iterrows():
match_filter = row[:, 'compass'].duplicated()
if len(row[:, 'compass'][match_filter] > 0)
compass_match_indexes.append(index)
您可以使用该列表选择您的数据框,例如df.loc[compass_match_indexes]
-
另一种方法是,您可以使用df.T获取DataFrame的转换,然后使用duplicated函数。