我有一组DataFrame,其中包含带有时间戳的推文。为了创建每日时间序列,我尝试将每个DataFrame中的行逐日合并。
我的解决方案是循环执行以下代码:
<script>
尽管结果看起来还不错,但循环非常缓慢且无故复杂。另外,如果我再次像这样合并行,结果将是列表中的列表,这也是不希望的。
该过程应该如下:
df_temp = df[df['created_sec'].isin(range(date_start,date_end))]
df_temp = pd.DataFrame(zip(df_temp.T.values), index= df_temp.columns)
data = data.append(df_temp.T)
df = pd.DataFrame({'time': [1,2,3,4,5],
'text': ['foo', 'bar', 'foo', 'bar', 'foo']})
time text
0 1 foo
1 2 bar
2 3 foo
3 4 bar
4 5 foo
和1,2,3
合并时间之后:4,5
time text
0 [1, 2, 3] [foo, bar, foo]
1 [4, 5] [bar, foo]
和[1,2,3]
后:[4,5]
答案 0 :(得分:0)
这可能有效:
def summarize(df,start,end,columns):
row = {}
for col in columns:
print(df[col][start:end].tolist())
row[col]=df[col][start:end].tolist()
df =df.append(row,ignore_index=True)
df=df.drop(df.index[range(start,end)])
df = df.reset_index()
return df
答案 1 :(得分:0)
第一个问题
s = df.groupby(df.index//3).agg(list)
s
time text
0 [1, 2, 3] [foo, bar, foo]
1 [4, 5] [bar, foo]
第二个问题
s.sum().to_frame(0).T
time text
0 [1, 2, 3, 4, 5] [foo, bar, foo, bar, foo]
答案 2 :(得分:0)
df = pd.DataFrame({'time': [1,2,3,4,5],
'text': ['foo', 'bar', 'foo', 'bar', 'foo']})
df
text time
0 foo 1
1 bar 2
2 foo 3
3 bar 4
4 foo 5
def consolidate(df, break_index): #df = dataframe, break_index = index where you want to create the first list
text = [[x for x in df['text'][0:break_index]]]
time = [[x for x in df['time'][0:break_index]]]
if break_index == len(df):
pass
else:
time.append([x for x in df['time'][break_index:]])
text.append([x for x in df['text'][break_index:]])
df2 =pd.DataFrame({'time':time,'text':text})
return df2
consolidate(df,3)
text time
0 [foo, bar, foo] [1, 2, 3]
1 [bar, foo] [4, 5]
consolidate(df,5)
text time
0 [foo, bar, foo, bar, foo] [1, 2, 3, 4, 5]