如何将三重DataFrame转换为不重复行的新DataFrame?
问题描述:
我有一个名为DF1和DF2两只大熊猫DataFrames,其定义如下:如何将三重DataFrame转换为不重复行的新DataFrame?
>> df1 = pd.DataFrame({
'id': ['A', 'A', 'A', 'B', 'B', 'C', 'C'],
'year': [2015, 2016, 2017, 2016, 2017, 2015, 2017],
'amount': [1, 2, 3, 4, 5, 6, 7] })
>> df2 = pd.DataFrame({
'id': ['A', 'B', 'C'],
'2015': [1, np.NaN, 6],
'2016': [2, 4, np.NaN],
'2017': [3, 5, 7] })
>> df1
amount id year
0 1 A 2015
1 2 A 2016
2 3 A 2017
3 4 B 2016
4 5 B 2017
5 6 C 2015
6 7 C 2017
>> df2
2015 2016 2017 id
0 1.0 2.0 3 A
1 NaN 4.0 5 B
2 6.0 NaN 7 C
正如你可以看到,这两个DataFrames包含相同的信息。 DataFrame df1是三元组,而df2是DataFrame,其字段ID中没有重复值。
我的问题是如何使用大熊猫DF1以有效的方式DF2转换(不for循环)? 那么df2到df1怎么样?
答
您可以转动DF1得到DF2这样的:
pd.pivot_table(df1, index='id', columns='year', values = 'amount')
year 2015 2016 2017
id
A 1 2 3
B NaN 4 5
C 6 NaN 7
和熔体做反向
pd.melt(df2, id_vars=["id"],var_name="year", value_name="amount").dropna()
id year amount
0 A 2015 1
2 C 2015 6
3 A 2016 2
4 B 2016 4
6 A 2017 3
7 B 2017 5
8 C 2017 7
+0
好的解决方案!非常感谢你! – o0Helloworld0o
你只需要'pivot'。 'df1.pivot('id','year','amount')' – Psidom