我有以下的样本DF
import pandas as pd
import numpy as np
# Create a range of timestamps for 100 consecutive days starting from today
timestamps = pd.date_range(start=pd.Timestamp.now().floor('H'), periods=100, freq='H')
# Create a DataFrame with 100 rows and 3 columns
df = pd.DataFrame({'timestamp': timestamps,
# 'value1': np.random.randn(100),
# 'value2': np.random.randint(0, 10, 100)})
'value1': 'abc', 'value2': 'def'})
# Group the rows by day and apply a custom function that concatenates values
df = df.groupby(df['timestamp'].dt.date).agg({'timestamp': 'first',
'value1': lambda x: ', '.join(x),
'value2': lambda x: ', '.join(x),
}).reset_index(drop=True)
print(df.head())
现在我已经在创建dataframe的过程中注解掉了value 1和value 2,以便首先尝试使用字符串。最终我需要它与浮点数一起工作。现在它将字符串组合为一个长逗号分隔的字符串,在一列中,我想这离我想要的又近了一小步。
我试图实现的是创建一个DF,它将1天的所有行合并为一个巨大的行,重命名列名,因此列应该看起来像这样:timestamp,value1_00,value2_00,value1_01,value2_01,...,value2_23
现在我已经尝试了一点,但是因为我对pandas很陌生,所以我不完全确定从哪里开始,解决这个问题的一个好的开始是什么?我正在考虑的一件事是创建一个小for循环来创建新的列,因为它可以是一个简单的循环,如:
for i in range(0,24):
if i < 10:
new_column1 = 'value1_0' + str(i)
new_column2 = 'value2_0' + str(i)
new_columns = [new_column1, new_column2]
df[new_columns] = np.nan
else:
new_column1 = 'value1_' + str(i)
new_column2 = 'value2_' + str(i)
new_columns = [new_column1, new_column2]
df[new_columns] = np.nan
但是我如何将正确的值添加到正确的新列中呢?我确信可以通过创建几个函数来完成,但肯定有更方便的方法!
2条答案
按热度按时间0lvr5msh1#
IIUC,您可以使用
pivot
:输出:
njthzxwz2#
我想我正确地理解了你的问题,如果是这样,你可以使用一个groupby沿着unstacking来得到想要的结果。
我可以在今天下班后更新解释,我想尽快把这个给你!
请通过打印new_frame让我知道这是否对您有效。