python - Python Pandas 从现有数据帧的所有行组合创建一个新数据帧
问题描述
我有 2 个输入数据帧 (df1
和df2
),具有相同的结构,我想创建第三个 ( output_df
),其中包含输入数据帧的所有行组合。
df1 = pd.DataFrame([["John","18","a"],["Jane","19","b"],["Jim","20","c"]],columns=['Name','Age','Function'])
df2 = pd.DataFrame([["Don","21","d"],["Diana","22","e"],["Dave","23","f"]],columns=['Name','Age','Function'])
output_df=pd.DataFrame([["John_Don","18_21","a_d"],
["John_Diana","18_22","a_e"],
["John_Dave","18_23","a_f"],
["Jane_Don","19_21","b_d"],
["Jane_Diana","19_22","b_e"],
["Jane_Dave","19_23","b_f"],
["Jim_Don","20_21","c_d"],
["Jim_Diana","20_22","c_e"],
["Jim_Dave","20_23","c_f"]],columns=['Name','Age','Function'])
新数据框将具有初始数据框相应列的总和(“+”)。(我知道字符串被连接起来 - 如果输入是字符串,这就是我所追求的)
下面的代码创建了output_df
,但它是空的,并且代码运行时间过长。以下示例代码仅针对 2x10 记录作为输入运行。最终,我将处理来自每个数据帧的数千条记录作为输入。
Q1:填充输出数据框时我缺少什么?
Q2:如何让我的代码更有效率?
output_df=pandas.DataFrame(columns=['Name','Age','Function'])
i=0
for lendf1 in range (10):
for lendf2 in range(10):
output_df=output_df.append(pandas.Series(),ignore_index=True)
i=i+1
for column in output_df:
output_df[column][i]=df1[column][lendf1:lendf1+1]+df2[column][lendf2:lendf2+1]
解决方案
我相信你正在寻找这个:
first = pd.Series(['a', 'b', 'c', 'd', 'e'])
second = pd.Series(['f', 'g', 'h', 'i', 'j'])
pd.DataFrame(np.add.outer(first, second))
输出:
0 1 2 3 4
0 af ag ah ai aj
1 bf bg bh bi bj
2 cf cg ch ci cj
3 df dg dh di dj
4 ef eg eh ei ej
请注意,输入应该是类型pd.Series
而不是数据帧。
推荐阅读
- jquery - 如何在 Rails find_by_sql 和 group_by 中传递变量
- ruby-on-rails - 如何将我的主页与其他页面连接起来?
- reactjs - 如何使用谷歌材料 UI 为菜单项编写测试用例
- jolt - 按条件进行 JOLT 变换
- assembly - 在 8086 中添加两个 8 位数字给出错误答案
- jsf - PrimeFaces commandButton 在提交后不起作用
- python - Python 装饰器将实例初始化变量转换为自身属性
- windows-subsystem-for-linux - 为什么“systemctl”不能在 Windows 上的 Ubuntu 终端中工作?
- java - if 语句中的多个条件 - first 始终为真
- php - 使用 Guzzle 上传带有文件的数据 - Laravel