循环在python中重新编码变量

时间:2016-10-31 23:09:19

标签: python pandas dataframe

我对编程很新,我有一个问题就是使用循环来重新编码pandas数据框中的变量,我希望能得到一些帮助。

我想在pandas数据框中重新编码多个列,从几秒到几分钟。我已经在python中编写了一个简单的函数,然后可以在每个有效的列上复制和重复它,但我想自动执行此操作。我很感激帮助。

ivf.secondsUntilCC.xxx列包含发生事件之前的秒数。我希望新列ivf.minsUntilCC.xxx是分钟数。数据框名称是数据。

def f(x,y):
    return x[y]/60

data['ivf.minsUntilCC.500'] = f(data,'ivf.secondsUntilCC.500')

data['ivf.minsUntilCC.1000'] = f(data,'ivf.secondsUntilCC.1000')

data['ivf.minsUntilCC.2000'] = f(data,'ivf.secondsUntilCC.2000')

data['ivf.minsUntilCC.3000'] = f(data,'ivf.secondsUntilCC.3000')

data['ivf.minsUntilCC.4000'] = f(data,'ivf.secondsUntilCC.4000')

1 个答案:

答案 0 :(得分:0)

我会使用矢量化方法:

In [27]: df
Out[27]:
        X  ivf.minsUntilCC.500  ivf.minsUntilCC.1000  ivf.minsUntilCC.2000  ivf.minsUntilCC.3000  ivf.minsUntilCC.4000
0  191365               906395                854268                701859                979647                914942
1  288577               300394                577555                880370                924162                897984
2   66705               493545                232603                682509                794074                204429
3  747828               504930                379035                 29230                410390                287327
4  926553               913360                657640                336139                210202                356649

In [28]: df.loc[:, df.columns.str.startswith('ivf.minsUntilCC.')] /= 60

In [29]: df
Out[29]:
        X  ivf.minsUntilCC.500  ivf.minsUntilCC.1000  ivf.minsUntilCC.2000  ivf.minsUntilCC.3000  ivf.minsUntilCC.4000
0  191365         15106.583333          14237.800000          11697.650000          16327.450000          15249.033333
1  288577          5006.566667           9625.916667          14672.833333          15402.700000          14966.400000
2   66705          8225.750000           3876.716667          11375.150000          13234.566667           3407.150000
3  747828          8415.500000           6317.250000            487.166667           6839.833333           4788.783333
4  926553         15222.666667          10960.666667           5602.316667           3503.366667           5944.150000

设定:

df = pd.DataFrame(np.random.randint(0,10**6,(5,6)),
                  columns=['X','ivf.minsUntilCC.500', 'ivf.minsUntilCC.1000',
                           'ivf.minsUntilCC.2000',  'ivf.minsUntilCC.3000',
                           'ivf.minsUntilCC.4000'])

说明:

In [26]: df.loc[:, df.columns.str.startswith('ivf.minsUntilCC.')]
Out[26]:
   ivf.minsUntilCC.500  ivf.minsUntilCC.1000  ivf.minsUntilCC.2000  ivf.minsUntilCC.3000  ivf.minsUntilCC.4000
0               906395                854268                701859                979647                914942
1               300394                577555                880370                924162                897984
2               493545                232603                682509                794074                204429
3               504930                379035                 29230                410390                287327
4               913360                657640                336139                210202                356649