python - 在 Pandas 中通过修改复制一行
问题描述
我有一个如下的数据框:
df = pd.DataFrame({'ID': [1,1,2,2,2,3], 'year': [2017, 2018, 2017, 2018, 2019, 2018], 'count': [1,2,2,3,4,1]})
我想复制 ID,使每个 ID 都与 2017、2018 和 2019 年相关联。这里是我期待的输出:
df_i_want = pd.DataFrame({'ID': [1,1,1,2,2,2,3,3,3], 'year': [2017, 2018, 2019, 2017, 2018, 2019, 2017, 2018,2019], 'count': [1,2,np.nan,2,3,4,np.nan,1,np.nan]})
你有解决方案吗?提前谢谢。
解决方案
用于所有Series.unstack
列DataFrame.stack
组合:
df1 = (df.set_index(['ID','year'])['count']
.unstack()
.stack(dropna=False)
.reset_index(name='count'))
或DataFrame.reindex
与MultiIndex.from_product
:
#if want specify years by list
mux = pd.MultiIndex.from_product([df['ID'].unique(), [2017, 2018, 2019]], names=['ID','year'])
#if want all unique years
mux = pd.MultiIndex.from_product([df['ID'].unique(),df['year'].unique()],
df1 = df.set_index(['ID','year']).reindex(mux).reset_index()
print (df1)
ID year count
0 1 2017 1.0
1 1 2018 2.0
2 1 2019 NaN
3 2 2017 2.0
4 2 2018 3.0
5 2 2019 4.0
6 3 2017 NaN
7 3 2018 1.0
8 3 2019 NaN
推荐阅读
- php - 如何将字符串中的数组路径评估为真实的数组路径
- c# - C#将两个标题列合并为一列?
- python-3.x - Numpy 和 TensorFlow RNN 形状表示不匹配
- docker - 为什么 docker 节点容器在 docker 卷中找不到本地文件?
- kubernetes-ingress - 将特定子目录重定向到 Ingress 中的新 url
- java - 即使我只添加到它,我是否应该使列表线程安全?
- java - Apache Flink 与 AWS Kinesis Analytics
- laravel - 如何在 Laravel 5.7 中生成 JWT 刷新令牌
- python - SyntaxError:无效的语法 Selenium
- c++ - 第一次在 NetBeans IDE 8.2 中使用 SFML-2.5.1 我遇到了问题