我有一个类似以下的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行。这是在熊猫中执行循环的最佳方法吗?还有另一种更快的方法吗?
答案 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
。