同时在多个pandas DataFrame上的笛卡尔积

时间:2017-11-15 05:52:29

标签: python pandas dataframe

我想在熊猫中做与MYSQL笛卡儿产品相同的操作 例如,表ab具有相同的列名"Price",我想将名称更改为"a.Price""b,Price"并阻止这两个{{1}合并为一列的属性。

但是,pandas merge只能在其共享列上合并两个DataFrame:

"Price"

结果是这样的,但我想重命名这两个dfa = pd.DataFrame({'price': [30,40], 'discount': ['0.1', '0.2']}) dfb = pd.DataFrame({'price': [100,120], 'title': ['abc', 'xyz']}) df_result = pd.merge(dfa,dfb,how="outer") discount price title 0 0.1 30 NaN 1 0.2 40 NaN 2 NaN 100 abc 3 NaN 120 xyz 属性并将它们分成两列。 我看到其他答案建议手动为每个DataFrame添加相同的键,但是当我有几个大型DataFrame(超过2个)时,我想知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

我不太清楚你为什么要这样做,但你可以为每一列添加一个前缀:

In [11]: dfa.add_prefix("a_")
Out[11]:
  a_discount  a_price
0        0.1       30
1        0.2       40

我会使用concat而不是merge

In [12]: pd.concat([dfa.add_prefix("a_"), dfb.add_prefix("b_")])
Out[12]:
  a_discount  a_price  b_price b_title
0        0.1     30.0      NaN     NaN
1        0.2     40.0      NaN     NaN
0        NaN      NaN    100.0     abc
1        NaN      NaN    120.0     xyz

要做两个以上,将更多内容传递到列表中:

pd.concat([dfa.add_prefix("a_"), dfb.add_prefix("b_"), dfc.add_prefix("c_")])