我有一个来自应用操作的对象,我想将它与数据帧合并。我的理解是来自apply操作的对象不是数据帧,因此不可能使用合并操作。一种方法是转换为数据帧,但我不知道如何。
例如,我使用以下代码获取数据帧df1的第一个有效索引:
p1 = df1.apply(lambda series: series.first_valid_index())
结果我得到了以下内容:
AAA 5
BBB 6
CCC 3
我想将其与数据框df2合并:
val1 val2
Index
AAA 12 qw
BBB 6 te
CCC 31 gb
所以我可以得到以下内容:
val1 val2 val3
Index
AAA 12 qw 5
BBB 6 te 6
CCC 31 gb 3
当我尝试输入(df1)时,我得到以下内容
<class 'pandas.core.series.Series'>
我该如何进行合并操作?谢谢你的帮助。
答案 0 :(得分:1)
加入对齐索引。
p1.name = 'val3'
>>> df2.join(p1)
val1 val2 val3
AAA 12 qw 5
BBB 6 te 6
CCC 31 gb 3
答案 1 :(得分:0)
我认为您不应该使用merge来合并两个数据帧以满足您描述的特定需求。我最好建议使用concat函数或join方法;例如,用法请参考以下docs。
作为解决问题的方法,我抓了一段代码。如果它是一个pandas系列对象,您应该可以通过指定新列将其添加到数据框中。
import pandas as pd
# Making some definitions
ind = ["AAA", "BBB", "CCC"]
cols = ["val1","val2","val3"]
val1 = pd.Series(index=ind, data=[21,22,23])
val2 = pd.Series(index=ind, data=["qw","te","gb"])
val3 = pd.Series(index=ind, data=[1,2,3])
ser = [val1,val2,val3]
# Defining a dataframe using the defined series objects
df1 = pd.DataFrame(index=ind, data={cols[i]:ser[i] for i in range(3)})
df2 = pd.DataFrame(index=ind, data={cols[i]:ser[i] for i in range(2)})
# Making a dataframe from first two series objects and adding
# third column
df22 = df2.copy()
print("Test1, Before:")
print(df2)
df22["val3"] = val3
print("Test1, After:")
print(df22)
# Same thing done using join
dfj = df2.copy()
val3.name = "val3" #need name for join
dfj = dfj.join(val3)
print("Test2, After:")
print(dfj)
# same thing done using concat
dfc = df2.copy()
dfc = pd.concat([dfc,val3],axis=1)
print("Test3, After:")
print(dfc)