从行和合并列中提取特定列

时间:2018-07-11 16:02:50

标签: python pandas

我有一个熊猫系列的时差,存储在一个名为min_time_diff的变量中。 现在,我想以最短的时间差返回行

out = df3.loc[min_time_diff.idxmin()]

但是我只希望它返回其中一个称为'Date'的特定列值,并使用一些列值创建一个新的pandas数据框。 我已经将它们存储在单独的变量中,例如a,b,c ...等 我是否每次都要使用df['col1']=a df['col2']=b还是有更简单的更短方法?

编辑- 当我这样做时 out = df3.loc [min_time_diff.idxmin()] 它返回一行包含很多列的行。我希望idxmin仅从中返回名为“ Date”的列。

然后我有一个变量,例如id-'197_%'code = 487 ...我想将所有这些变量和从输出中获得的结果合并到一个新的数据框中。

1 个答案:

答案 0 :(得分:0)

您可以使用.assign()方法,请参见docs

>>> df = pd.DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})
  

该值是可调用的,在df上评估:

>>> df.assign(ln_A = lambda x: np.log(x.A))
    A         B      ln_A
0   1  0.426905  0.000000
1   2 -0.780949  0.693147
2   3 -0.418711  1.098612
3   4 -0.269708  1.386294
4   5 -0.274002  1.609438
5   6 -0.500792  1.791759
6   7  1.649697  1.945910
7   8 -1.495604  2.079442
8   9  0.549296  2.197225
9  10 -0.758542  2.302585

您还可以一次分配多个列,即使它们的值相互依赖也是如此:

>>> df = pd.DataFrame({'A': [1, 2, 3]})
>>> df.assign(B=df.A, C=lambda x:x['A']+ x['B'])
    A  B  C
 0  1  1  2
 1  2  2  4
 2  3  3  6

编辑-Jon Clements的精彩作品:

可以在同一分配中分配多个列。对于Python 3.6及更高版本,“ ** kwargs”中的后续项目可能会引用“ df”中新创建或修改的列;计算项目并将其按顺序分配到“ df”中。对于Python 3.5及以下版本,未指定关键字参数的顺序,因此无法引用新创建或修改的列。首先计算所有项目,然后按字母顺序分配。