【问题标题】:Creating new column taking single value from column of another dataframe创建从另一个数据框的列中获取单个值的新列
【发布时间】:2021-07-10 13:19:15
【问题描述】:

我有两个数据框。第一个是df1 = pd.DataFrame({'A': [5, 0], 'B': [2, 4]})

    A   B
0   5   2
1   0   4

另一个是df2 = pd.DataFrame({'C': [1, 1], 'D': [3, 3]}),即

    C   D
0   1   3
1   1   3

我只想从 df1 中获取 4 个并在 df2 中创建新列。我试过这个df2['E']=df1['B'][df1['B']==4] 并得到了

    C   D    E
0   1   3   NaN
1   1   3   4.0

我希望 df2 的两行都是 4。我怎样才能做到这一点?任何帮助都会是巨大的帮助。

【问题讨论】:

  • 如果你已经知道你希望它是 4,那么就做df2['E']=4 否则一定有一些你没有告诉我们的其他逻辑。您是要获取Bmax 还是最后一个值?一定是什么。
  • 谢谢@Chris,但我有比这更大的数据。这只是为了可读性和清晰的提问。除了这个,你还有什么其他方法可以推荐吗?
  • @Chris 不是我不想要 maxB 也不是最后一个值。我只想要可以为任何值执行此操作的代码。
  • 那么您是否只是检查该值是否存在,如果存在,则用该值填充一个新列?如果那个值不存在,你想要一个空值吗?
  • @Chris 是的。是的,如果值不存在,那么如果我得到 NaN 则很好

标签: python pandas dataframe


【解决方案1】:

如果值“4”作为列中的最后一个值出现(如您的示例),您可以这样做:

df2['E'].fillna(method= 'backfill')

其他方法看这里:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

【讨论】:

    【解决方案2】:

    实际上并不清楚您想在这里完成什么,但我假设您想检查 df1(B 列)中是否有任何“4”,然后用“4”填充 df2(E 列)中的所有行.然后你可以这样做:

    import numpy as np
    
    df2['E'] = np.where(df1['B'].isin([4]).any(), 4, np.nan)
    

    输出:

        C   D     E
    0   1   3   4.0
    1   1   3   4.0
    

    【讨论】:

    • 我想先检查一下4,如果该值存在,我只想用该值填充一个新列。
    • 所以如果你使用我提供的解决方案,你会得到预期的结果。
    • 在没有 numpy.如果我不关注浮点值而只关注 4 怎么办?可以给我推荐一下吗?
    • Numpy 解决方案对我来说是最合理的,也是我在这里唯一可以建议的解决方案。如果您想将值视为整数,请在末尾添加 .astype(int)。
    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多