微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas:将列值复制到第二个数据帧中的行改写

如何解决Pandas:将列值复制到第二个数据帧中的行改写

重新表述一下,抱歉之前有点不清楚。

考虑这个数据:

import pandas as pd

d = {
    "id": [1,1,2,3,3],"col_to_fill": [0,0]
}

df = pd.DataFrame(d)

df

    id  col_to_fill
0   1   0
1   1   0
2   1   0
3   1   0
4   1   0
5   2   0
6   2   0
7   2   0
8   2   0
9   2   0
10  3   0
11  3   0
12  3   0
13  3   0
14  3   0  



d1 = {
    "id": [1,"val1": [23,23,0],"val2": [42,44,9],"val3": [12,8,55],"val4": [2,88,21],"val5": [53,33]
}

df2 = pd.DataFrame(d1)

df2

   id   val1    val2    val3    val4    val5
    1   23      42      12      2       53
    2   23      44      8       88      2
    3   0       9       55      21      33
    4   0       9       55      21      33

..............

在 df 中,我的行的 ID 为每个唯一 ID 重复了 N 次(在这种情况下 N=5,但希望它在实际用例中为 21,或者任何可能的情况下工作)。

在 df2 中,我在第 1 列中具有相同的唯一 ID,以及一些列值(val1、val2 等)

目标:

  • 我希望每个仪器的 df 中的每一行都有 val1、val2、val3、val4、val5。

对于 ID 1 和 2:

id  col_to_fill
1   23
1   42
1   12
1   2
1   53
2   23
2   44
2   8
2   88
2   2

等等 ......

这行不通:

df2.melt(id_vars=['id'])

因为那样

id  variable
1   val1
1   val1
1   val1
1   val1
1   val1
2   val2
2   val2
2   val2
2   val2
2   val2

我需要:

id  variable
1   val1
1   val2
1   val3
1   val4
1   val5
2   val1
2   val2
2   val3
2   val4
2   val5

(当然除了实际值,但我想要那些变量的值)

解决方法

DataFrame.set_indexDataFrame.stack 一起使用:

df2 = df2.set_index('id').stack().rename_axis(['id','new']).reset_index().drop(0,axis=1)
print (df2)
    id   new
0    1  val1
1    1  val2
2    1  val3
3    1  val4
4    1  val5
5    2  val1
6    2  val2
7    2  val3
8    2  val4
9    2  val5
10   3  val1
11   3  val2
12   3  val3
13   3  val4
14   3  val5

然后如果需要添加到另一个具有不同大小的 DataFrame 可能使用 GroupBy.cumcountDataFrame.merge 技巧:

d = {
    "id": [1,1,2,3,3],"col_to_fill": [0,0]
}

df = pd.DataFrame(d)

df['g'] = df.groupby('id').cumcount()
df2['g'] = df2.groupby('id').cumcount()

df = df.merge(df2,on=['id','g'])
print (df)
    id  col_to_fill  g   new
0    1            0  0  val1
1    1            0  1  val2
2    1            0  2  val3
3    1            0  3  val4
4    2            0  0  val1
5    2            0  1  val2
6    2            0  2  val3
7    2            0  3  val4
8    3            0  0  val1
9    3            0  1  val2
10   3            0  2  val3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?