在熊猫中执行循环

时间:2020-06-06 18:35:38

标签: python pandas

我有一个类似以下的CSV文件:

i,ix,iz,iy,u'
0,1,1,1,-0.8696748576752853
1,1,1,2,2.3557976585107454
2,1,1,3,0.47209618683697663
3,1,1,4,-1.930481713597933
4,1,1,5,-1.7868247414530511
5,1,1,6,-0.5603642778861779
6,1,1,7,0.24540750240253573
7,1,1,8,0.5505270314521304
8,1,1,9,-0.1954277406567968
9,1,1,10,-1.3521265193776344

在ix,iy,iz中施加某些条件时,如何从u'获得值?例如,我想像上面一样执行for

for iy in list1:
    for iz in list2:
        for ix in list3:
           U = 2*df.iloc[a,4] ## `a` is just a row resulted from the the for's combination.

此外,整个CSV都有128 ^ 3行。这是在熊猫中执行循环的最佳方法吗?还有另一种更快的方法吗?

2 个答案:

答案 0 :(得分:2)

通常,条件语句可以这样写:

df[
  (df['ix'] == ix) &
  (df['iy'] == iy) &
  (df['iz'] == iz)
]["u'"]

为了同样遍历提到的列表中的项目,可以使用itertools.product

for ix, iy, iz in itertools.product(list1, list2, list3):
    output = df[
      (df['ix'] == ix) &
      (df['iy'] == iy) &
      (df['iz'] == iz)
    ]["u'"]

答案 1 :(得分:1)

您可以这样做:

df[(df["ix"] == ix) & (df["iy"] == iy) & (df["iz"] == iz)]["u'"]

获得Series"u'"的行满足您的ix / iy / iz条件。如果您有多个ix / iy / iz条件,可以将其放入for循环中。请注意,因为可能有多个满足特定条件的行,所以将返回Series

如果您只对某个特定值感兴趣(假设只有一行可以保证满足您的特定条件,则为第一个),那么您可以使用Series对此[0]进行索引。

尽管条件很可能根本没有匹配的行,但是您要在索引之前确保此len的{​​{1}}是Series