我在Python Pandas中有一个Data Frame,如下所示:
data = [
(1, None, None, None, '2023-01-10', None, None),
(1, None, None, None, '2023-01-10', 1, 0),
(1, 9, 0, 0.55, '2023-01-10', 15, None),
(2, None, None, None, '2023-11-22', 2, 1),
(2, 88, 1, 0.68, '2023-11-22', 103, 8)
]
df = pd.DataFrame(data, columns=['id', 'col1', 'col2', 'col3', 'col_date', 'col4', 'col5'])
df
字符串
的数据
我需要为列中的每组值:id,col_date(数据类型datetime)填充列中的值:col1,col2,col3。对于列中的每组值:id,col_date至少有一行的值:col1,col2,col3,我需要为每个提到的组填充其余的行。
列中的值:col4,col5(以及本例中未包括的其他列)保持不变。
因此,我需要下面这样的东西:
data = [
(1, 9, 0, 0.55, '2023-01-10', None, None),
(1, 9, 0, 0.55, '2023-01-10', 1, 0),
(1, 9, 0, 0.55, '2023-01-10', 15, None),
(2, 88, 1, 0.68, '2023-11-22', 2, 1),
(2, 88, 1, 0.68, '2023-11-22', 103, 8)
]
df = pd.DataFrame(data, columns=['id', 'col1', 'col2', 'col3', 'col_date', 'col4', 'col5'])
df
型
的
如何在Python Pandas中做到这一点?
2条答案
按热度按时间rryofs0p1#
您仍然可以使用my previous answer,但在
groupby
和transform
之间选择所需的列:字符串
max
仅在dtype为数字时有效。如果不是,您可以使用自定义函数。将'max'
替换为lambda x: x.dropna().squeeze()
或lambda x: x.ffill().bfill()
:型
but5z9lq2#
看看你是否可以尝试一下。基本上,下面的代码片段将datrame合并到自身(在保留非nan行之后)。注意,df2将只包含所有三列(col1,col2和col3)都具有非空值的行。
字符串