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