当前位置: 首页 > 知识库问答 >
问题:

基于其他列创建一个新列作为另一个数据帧的索引

尹何平
2023-03-14

假设我有一个至少有两列col1和col2的数据帧。此外,我还有另一个数据帧,其列名是col1中的值,其索引是col2中的值。

import pandas as pd
df1 = pd.DataFrame( {'col1': ['x1', 'x2', 'x2'], 'col2': ['y0', 'y1', 'y0']})
print(df1)
  col1 col2
0   x1   y0
1   x2   y1
2   x2   y0

print(df2)
     y0   y1
x1    1    4
x2    2    5
x3    3    6

现在我想添加col3,它在col1的索引处和col2的列中给出第二个数据帧的值。结果应该如下所示:

   col1  col2  col3
0    x1    y0     1
1    x2    y1     5
2    x2    y0     2

谢谢大家!!

共有2个答案

闻安宜
2023-03-14

Pandas在索引和列上都支持联接操作,这意味着您可以执行以下操作:

df1.merge(df2, left_on='col1', right_index=True)

生产

  col1 col2  y0  y1
0   x1   y0   1   4
1   x2   y1   2   5
2   x2   y0   2   5

下一步是将正确的值输入col3

这是一个有点低效但它是一种方法得到正确的数据到一个列

df['col3'] = df[['col2', 'y0', 'y1']].apply(lambda x: x[int(x[0][1]) + 1], axis=1)
濮阳
2023-03-14

您可以使用堆栈为新的df合并

df2 = df2.stack().reset_index()
df2.columns = ['col1','col2','col3']
print (df2)
  col1 col2  col3
0   x1   y0     1
1   x1   y1     4
2   x2   y0     2
3   x2   y1     5
4   x3   y0     3
5   x3   y1     6

print (pd.merge(df1, df2, on=['col1','col2'], how='left'))
  col1 col2  col3
0   x1   y0     1
1   x2   y1     5
2   x2   y0     2

另一个解决方案是使用join创建新的系列

s = df2.stack().rename('col3')
print (s)
  col1 col2
0   x1   y0
1   x2   y1
2   x2   y0
x1  y0    1
    y1    4
x2  y0    2
    y1    5
x3  y0    3
    y1    6
Name: col3, dtype: int64

print (df1.join(s, on=['col1','col2']))
  col1 col2  col3
0   x1   y0     1
1   x2   y1     5
2   x2   y0     2
 类似资料:
  • 基于dataframe列val_1值,查看其他列col_0-10标签前缀,然后创建另一列Mycl。 数据帧看起来像: 应用逻辑后所需的数据帧: 我是trid,但这不起作用:df['mycol']=df['col'df['val_1']。aType(str)] DDL生成DataFrame: 谢谢!

  • 问题内容: 我想比较在创建新列的两列的值。如果它们等于1,我想要1,否则等于0。 我得到了以下错误 问题答案: 您需要将布尔型蒙版转换为: 样品: 因为比较列的输出不是标量,而是(和)和值,所以会出现错误。 因此需要或 用于返回标量或。

  • 我有两个数据帧df1和df2 df1如下 df2就像 我想根据df2中与df1中的列名匹配的单元格值将值从df1复制到df2,所以我的df3应该看起来像 df3 基本上,我想根据df2的单元格值(df1中的列名)从df1复制df2中的列 如果它仍然令人困惑,请告诉我

  • 我有两个熊猫数据框 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'cal2'值 我的预期输出如下所示: 以下基于其他stackflow

  • 我有一个pandas dataframe,需要根据dataframe中其他列的值创建新列。这是数据帧 人城市国家国家 美国伊利诺伊州芝加哥 美国亚利桑那州凤凰城B酒店 C美国加利福尼亚州圣地亚哥 我想根据state中的值创建两个新列 创建新列df[“城北”]=df[“城市”]其中state=“伊利诺伊” 创建新列df[“城市南部”]=df[“城市”],其中州不等于“伊利诺伊州” 我试过了 但是不等

  • 我得到了一个具有多个列和行的数据帧df1。简单的例子: 我想创建一个空的数据框df2,然后再添加新的列和计算结果。 此时,我的代码如下所示: …添加两个新列: 有没有更好/更安全/更快的方法?是否可以创建一个空数据帧df2,并且只从df1复制索引?