Pandas 如何将一系列元组转换为数据帧?

Pandas 如何将一系列元组转换为数据帧?,pandas,Pandas,我试图在数据框的其他列中添加一些额外的数据 考虑以下示例代码: import pandas import numpy def more_data(d): return 1, 2 df = pandas.DataFrame({"A":[1, 2, 3], "B":[17, 16, 15]}) x = df.apply(more_data, axis=1) df1 = pandas.DataFrame(x) df2 = pandas.concat([df, df1], axis=1)

我试图在数据框的其他列中添加一些额外的数据

考虑以下示例代码:

import pandas
import numpy

def more_data(d):
    return 1, 2

df = pandas.DataFrame({"A":[1, 2, 3], "B":[17, 16, 15]})

x = df.apply(more_data, axis=1)
df1 = pandas.DataFrame(x)
df2 = pandas.concat([df, df1], axis=1)

print(df2)
输出为:

A  B       0
0  1  17  (1, 2)
1  2  16  (1, 2)
2  3  15  (1, 2)
这并不奇怪,因为apply()返回一个元组序列,该序列作为一列元组忠实地添加到数据帧中。然而,我想要的是另外两列,它们的值在元组中返回。那怎么办?

试试这个

导入熊猫
进口numpy
def更多_数据(d):
返回1,2
数据帧({“A”:[1,2,3],“B”:[17,16,15]})
x=df.apply(更多数据,轴=1)
df1=熊猫。数据帧(x)
df1=pandas.concat([df,df1],轴=1)
df1[['new_1','new_2']]=pandas.DataFrame([list(x)代表df1中的x[0]])
#结果
打印(df1)
A B 0新\u 1新\u 2
0  1  17  (1, 2)      1      2
1  2  16  (1, 2)      1      2
2  3  15  (1, 2)      1      2

您似乎能够获得的最接近的结果是使用
df。分配

df=pd.DataFrame({'x':[1,2,3],'y':[4,5,6]})
赋值(temp1=0,temp2=5)
#x y temp1 temp2
# 0  1  4      0      5
# 1  2  5      0      5
# 2  3  6      0      5
您也可以分配给series,因此您必须首先将每个列的结果放入一个序列中。这可能很容易:

s=pd.系列([('a','b')]*len(df))
赋值(s0=s.apply(λx:x[0]),s1=s.apply(λx:x[1]))
#x y s0 s1
#01 4 a b
#1 2 5 a b
#2 3 6 a b

您与自己的解决方案非常接近,如果您将数据框转换为列表,然后将其构造为数据框(再次定义列),它将起作用:

def more_data(d):
    return 1, 2

df = pd.DataFrame({"A":[1, 2, 3], "B":[17, 16, 15]})

x = df.apply(more_data, axis=1)
df1 = pd.DataFrame(x.tolist(), columns=['Col1', 'Col2']) # <-- line which is different
df2 = pd.concat([df, df1], axis=1)

是什么阻止您逐个添加它们?还有,列名呢?您的函数实际上依赖于数据框中的值吗?
   A   B  Col1  Col2
0  1  17     1     2
1  2  16     1     2
2  3  15     1     2