【问题标题】:Extracting particular column from row and merging columns从行中提取特定列并合并列
【发布时间】:2018-07-12 01:30:11
【问题描述】:

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

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

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

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

然后我有一个像 id-'197_%' code=487 这样的变量...我想将所有这些变量和从 out 获得的结果合并到一个新的数据帧中。

【问题讨论】:

  • 怎么样:out = df3.loc[min_time_diff.idxmin(), ['col1', 'col2']]?第二个参数可以是列列表。
  • @jpp 但如何将值存储在存储在变量中的列中,例如 a b 等
  • 对不起,我不知道你所说的a b等是什么意思。你能提供一个minimal reproducible example吗?
  • @jpp 很抱歉造成混乱...查看编辑
  • 对不起,我现在更糊涂了。在variables like id-'197_%' code=487 迷路了。认为我们需要minimal reproducible example。

标签: python pandas


【解决方案1】:

可以使用.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 及以下版本,未指定关键字参数的顺序,不能引用新创建或修改的列。首先计算所有项目,然后按字母顺序分配。

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2023-01-26
    相关资源
    最近更新 更多