#python #pandas #dataframe #nlp
Вопрос:
У меня есть набор данных под названием data_set_tweets.csv, как показано ниже
created_at,твит,количество
ретвитов 7/29/2021 2:40,Отличный солнечный день для крикета в Лондоне,3
7/29/2021 10:40,Отличный результат, набранный Англией,0
7/29/2021 11:50,Англия выиграла матч,1
И то, что я пытался сделать, — это ввести нижеприведенный вывод в фрейм данных.
Это означает, что я хочу повторить текст в столбце твита на основе значения retweet_count с теми же значениями created_at в этом конкретном твите
Ниже приведен ожидаемый результат для моего набора данных
created_at,Твиттер
7/29/2021 2:40,отличный солнечный день для игры в крикет в Лондоне
7/29/2021 2:40,отличный солнечный день для игры в крикет в Лондоне
7/29/2021 2:40,отличный солнечный день для игры в крикет в Лондоне
7/29/2021 2:40,отличный солнечный день для игры в крикет в Лондоне
7/29/2021 10:40,отличный результат поставить на Англию ватин
7/29/2021 11:50,Англия выиграла матч
7/29/2021 11:50,Англия выиграла матч
Ниже показано, как я начал свой подход
import pandas as pd
def iterateTweets():
tweets = pd.read_csv(r'data_set_tweets.csv')
df = pd.DataFrame(tweets, columns=['created_at', 'tweet', 'retweet_count'])
df['created_at'] = pd.to_datetime(df['created_at'])
df['tweet'] = df['tweet'].apply(lambda x: str(x))
df['retweet_count'] = df['retweet_count'].apply(lambda x: str(x))
# print(df)
return df
if __name__ == '__main__':
print(iterateTweets())
Я новичок в фреймах данных и python, может ли кто-нибудь мне помочь?
Ответ №1:
Используйте Index.repeat
с DataFrame.loc
для дублированных столбцов, DataFrame.pop
предназначен для использования и удаления столбца:
df = pd.read_csv(r'data_set_tweets.csv')
df['created_at'] = pd.to_datetime(df['created_at'])
df = df.loc[df.index.repeat(df.pop('retweet_count') 1)].reset_index(drop=True)
print (df)
created_at tweet
0 2021-07-29 02:40:00 Great Sunny day for Cricket at London
1 2021-07-29 02:40:00 Great Sunny day for Cricket at London
2 2021-07-29 02:40:00 Great Sunny day for Cricket at London
3 2021-07-29 02:40:00 Great Sunny day for Cricket at London
4 2021-07-29 10:40:00 Great Score put on by England batting
5 2021-07-29 11:50:00 England won the match
6 2021-07-29 11:50:00 England won the match
Ответ №2:
Или использовать:
df = df.apply(lambda x: x.repeat(df['retweet_count'] 1)).reset_index(drop=True)
Если вы хотите удалить retweet_count
столбец:
df = df.apply(lambda x: x.repeat(df['retweet_count'] 1)).reset_index(drop=True).drop('retweet_count', axis=1)
Или:
col = df.pop('retweet_count') 1
df = df.apply(lambda x: x.repeat(col)).reset_index(drop=True)
df
выход:
created_at tweet
0 2021-07-29 02:40:00 Great Sunny day for Cricket at London
1 2021-07-29 02:40:00 Great Sunny day for Cricket at London
2 2021-07-29 02:40:00 Great Sunny day for Cricket at London
3 2021-07-29 02:40:00 Great Sunny day for Cricket at London
4 2021-07-29 10:40:00 Great Score put on by England batting
5 2021-07-29 11:50:00 England won the match
6 2021-07-29 11:50:00 England won the match
Или использовать loc
с enumerate
:
df.loc[sum([[i] * (v 1) for i, v in enumerate(df['retweet_count'])], [])].reset_index(drop=True)