使用整数迭代for循环,该整数是字符串

时间:2018-04-02 09:14:45

标签: python pandas loops indexing

我有一个熊猫数据框,其中的轴有Time [s],Time [s] .1,Time [s] .2等等,直到时间[s] .30。我想找出具有最大分辨率的列。为此,我需要将这些全部置于for循环中。由于名称'Time [s] .x'是一个字符串,我不知道如何从0到30迭代它。

for i in df['Time[s]."Something to write here"]: 

示例输入数据帧:(列直到时间[s] .30)

Time[s]     v1  Time[s].1   v2
160.84621   0   160.84808   7
161.14613   0   161.14802   7

示例输出:'Time[s]' 因为(df['Time[s]'][1] - df['Time[s]][0])的区间小于。(df['Time[s].1'][1] - df['Time[s].1][0])                       wdActiveEndAdjustedPageNumber。  我需要检查所有30列。

1 个答案:

答案 0 :(得分:1)

我认为需要:

print (df)
     Time[s]  v1  Time[s].1  v2  Time[s].2  v3              Time[s].3  v4
0  160.84621   0  160.84808   7  168.84621   0              162.84808   7
1  161.14613   0  161.14802   7  170.14613   0              164.14802   7
2  163.12613   0  161.14852   7  170.64613   0  Disable this function   7
3  165.16613   0  161.14892   7  170.24613   0              160.14802   7

df1 = df.filter(like='Time').apply(lambda x: pd.to_numeric(x, errors='coerce')).diff()
print (df1)
   Time[s]  Time[s].1  Time[s].2  Time[s].3
0      NaN        NaN        NaN        NaN
1  0.29992    0.29994    1.29992    1.29994
2  1.98000    0.00050    0.50000        NaN
3  2.04000    0.00040   -0.40000        NaN

s = df1.idxmin(axis=1)
print (s)
0          NaN
1      Time[s]
2    Time[s].1
3    Time[s].2
dtype: object

<强>解释

  1. 首先使用DataFrame.filter
  2. Time对所有列进行过滤
  3. 每列转换to_numeric,参数errors='coerce'表示将非数字转换为NaN s
  4. DataFrame.diff
  5. 获取差异
  6. 最后按DataFrame.idxmin
  7. 每行按最小值获取列名称