我有一个DataFrame,我使用嵌套的for循环来遍历特定列的所有可用组合。我创建了一个示例代码:
from pandas import DataFrame
from numpy import unique
df = DataFrame([[30, 'DEV1', 'X4Y4', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]],
[30, 'DEV1', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]],
[30, 'DEV2', 'X4Y4', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]],
[30, 'DEV2', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]],
[85, 'DEV1', 'X4Y4', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]],
[85, 'DEV1', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]],
[85, 'DEV2', 'X4Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]],
[85, 'DEV2', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]]],
columns=['Temperature', 'Device', 'Coordinate', 'Voltage', 'Current'])
Temperature = unique(df['Temperature'])
for temperature in Temperature:
df1 = df.query("Temperature == @temperature")
Device = unique(df1['Device'])
for device in Device:
df2 = df1.query("Device == @device")
Coordinate = unique(df2['Coordinate'])
for coordinate in Coordinate:
df3 = df2.query("Coordinate == @coordinate")
# do something with df3['Voltage'] and df3['Current']
我肯定还有更好的办法。在网上,我读到了关于使用groupby
和agg
的文章,但我不太明白如何将其应用到我的案例中。
你能分享一下你的想法吗?
谢谢!
发布于 2022-09-24 00:08:49
您可以首先应用groupy函数,然后使用它的groups属性。它将返回具有键值的dict,所有可能的列值组合和dict值的值都是标签。
list(df.groupby(["Temperature","Device","Coordinate"]).groups.keys())
[(30, 'DEV1', 'X4Y4'),
(30, 'DEV1', 'X5Y5'),
(30, 'DEV2', 'X4Y4'),
(30, 'DEV2', 'X5Y5'),
(85, 'DEV1', 'X4Y4'),
(85, 'DEV1', 'X5Y5'),
(85, 'DEV2', 'X4Y5'),
(85, 'DEV2', 'X5Y5')]
https://stackoverflow.com/questions/73834568
复制