gpt4 book ai didi

python - 复杂的 pandas 合并操作

转载 作者:行者123 更新时间:2023-11-28 17:44:02 25 4
gpt4 key购买 nike

我对在 Pandas 中加入/合并数据还是很陌生,因此非常感谢任何帮助来完成以下操作。我有以下三个 SQL 表(转换为数据帧)的数据:

df1<br/>
Out[14]:<br/>
---- fruit price qty<br/>
2010 apple 1.0 2.0<br/>
2011 apple 3.0 4.0<br/>
2010 banana 0.5 1.5<br/>
2011 banana 7.0 8.0

df2<br/>
Out[15]:<br/>
---- fruit weight<br/>
2010 apple 10<br/>
2010 banana 12

df3<br/>
Out[16]:<br/>
-- fruit colour<br/>
0 apple red<br/>
1 banana yellow

df2 与 df1 有相同的果实,但年份不同(我几乎完全确定 df2 的年份是 df1 的子集,尽管最好找到一种方法,允许 df2 中的年份不包括在 df1) 中。 Df3 是一个表,其中包含 df2 和 df1 中包含的所有水果的字符。我想将这三个表合并在一起,因此新合并的 DataFrame 中的每一行都有年份、水果、价格、数量、重量(可能是 NaN)和颜色。我不确定这样的数据结构是否最好包含在 Panel 或 DataFrame 中 - 对此的输入也非常受欢迎。谢谢!

最佳答案

为了确保年份没有问题,我会先重置_index:

In [11]: df1.index.name = 'year'

In [12]: df2.index.name = 'year'

In [13]: df1.reset_index(inplace=True)

In [14]: df2.reset_index(inplace=True)

In [15]: df1
Out[15]:
year fruit price qty
0 2010 apple 1.0 2.0
1 2011 apple 3.0 4.0
2 2010 banana 0.5 1.5
3 2011 banana 7.0 8.0

[4 rows x 4 columns]

In [16]: df2
Out[16]:
year fruit weight
0 2010 apple 10
1 2010 banana 12

[2 rows x 3 columns]

现在你可以通过合并(两次)得到你的结果:

In [17]: df1.merge(df2, how='left').merge(df3, how='left')
Out[17]:
year fruit price qty weight colour
0 2010 apple 1.0 2.0 10 red
1 2011 apple 3.0 4.0 NaN red
2 2010 banana 0.5 1.5 12 yellow
3 2011 banana 7.0 8.0 NaN yellow

[4 rows x 6 columns]

如果您确信只有一个重量的水果(即与年份无关),您可以从 df2 中删除年份列:

In [18]: del df2['year']

In [19]: df1.merge(df2, how='left').merge(df3, how='left')
Out[19]:
year fruit price qty weight colour
0 2010 apple 1.0 2.0 10 red
1 2011 apple 3.0 4.0 10 red
2 2010 banana 0.5 1.5 12 yellow
3 2011 banana 7.0 8.0 12 yellow

[4 rows x 6 columns]

否则您可以进行 groupby 和 ffill。

关于python - 复杂的 pandas 合并操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20635781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com