python - 是否有一个熊猫函数可以将例如前三行连接在一起(就像我有一个长度为三的窗口)
问题描述
例如我有下面的DataFrame
df13 = pd.DataFrame(np.random.randint(1,9, size=(5,3)),
columns=['a','b','c'])
df13
a b c
0 8 5 2
1 5 7 7
2 3 7 5
3 7 7 7
4 2 2 6
并且想要
a b c a b c a b c
0 None None None None None None 8.00 5.00 2.00
1 None None None 8 5 2 5.00 7.00 7.00
2 8 5 2 5 7 7 3.00 7.00 5.00
3 5 7 7 3 7 5 7.00 7.00 7.00
4 3 7 5 7 7 7 2.00 2.00 6.00
5 7 7 7 2 2 6 nan nan nan
6 2 2 6 NaN NaN NaN nan nan nan
例如第 2 行有 2 前行。
我用这段代码做到这一点
def laa(df, previous_count):
dfNone = pd.DataFrame({col : None for col in df.columns},
index=[0])
df_tmp = df.copy()
for x in range(1 ,previous_count+1):
df_tmp = pd.concat([dfNone, df_tmp])
df_tmp = df_tmp.reset_index()
del df_tmp['index']
df = pd.concat([df_tmp, df], axis=1)
return df
(不得删除任何行)
熊猫没有这样做的功能吗?
解决方案
这将在 pandas中使用shift()
和函数来解决问题:concat()
df = pd.DataFrame(np.random.randint(1,9, size=(5,3)), columns=['a','b','c'])
df1 = pd.concat([df.shift(2), df.shift(1),df], axis = 1)
df2 = pd.concat([df, df.shift(-1),df.shift(-2)], axis = 1)
final_df = pd.concat([df1,df2]).drop_duplicates()
样本输出:
如果df
如下:
+----+-----+-----+-----+
| | a | b | c |
|----+-----+-----+-----|
| 0 | 6 | 2 | 6 |
| 1 | 7 | 2 | 1 |
| 2 | 4 | 4 | 5 |
| 3 | 1 | 1 | 1 |
| 4 | 2 | 2 | 4 |
+----+-----+-----+-----+
然后,final_df
将是:
+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| | a | b | c | a | b | c | a | b | c |
|----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
| 0 | nan | nan | nan | nan | nan | nan | 6 | 2 | 6 |
| 1 | nan | nan | nan | 6 | 2 | 6 | 7 | 2 | 1 |
| 2 | 6 | 2 | 6 | 7 | 2 | 1 | 4 | 4 | 5 |
| 3 | 7 | 2 | 1 | 4 | 4 | 5 | 1 | 1 | 1 |
| 4 | 4 | 4 | 5 | 1 | 1 | 1 | 2 | 2 | 4 |
| 3 | 1 | 1 | 1 | 2 | 2 | 4 | nan | nan | nan |
| 4 | 2 | 2 | 4 | nan | nan | nan | nan | nan | nan |
+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
推荐阅读
- c# - 插入数据到数据库错误参数
- javascript - 如何在php中传递带有特殊字符的字符串,以便我可以在页面上显示它
- java - 如何在JAVA的WebService中调用特定的@WebMethod?
- excel - Excel - 2次之间的差异,包括负数(不是#value)
- selenium - 单击事件在 Catalina OS 上的 Safaridriver 中不起作用,而在 Firefox 和 chrome 上同样起作用
- python - 使用 ElementTree find() 和命名空间查找属性值
- kotlin - Kotlin/Native - 如何使用 C 库和 Klib 文件?
- flutter - flutter - 通过状态(提供者/消费者)更新 TextField/TextEditingController
- docker - 如何确定 Redis 攻击源?
- arrays - 如何加载子表单中的所有字段以成为 Ms Access VBA 中 Json 字符串的一部分