提问人:Paul Corcoran 提问时间:10/12/2022 更新时间:10/12/2022 访问量:94
根据 pandas 数据帧的列值复制另一个数据帧中的行
Replicate rows in a pandas dataframe based on the column values of another dataframe
问:
import pandas as pd
data = [10]
booklines = pd.DataFrame(data,columns=['Nums'])
matches = {'Fullname':['Sasel - Dassendorf'],'HomeTeam':['Sasel'],'AwayTeam':['Dassendorf']}
matches_df = pd.DataFrame(matches)
有没有办法根据书行中存在的行值 10 复制 matches_df 中的行数。
最终结果是匹配 df 像这样复制了十次。我正在寻找一种编程方式来执行此操作,而不是像这样手动添加十个。
matches_df.append([matches_df]*10,ignore_index=真)
答:
1赞
jezrael
10/12/2022
#1
用:
val = booklines['Nums'].iat[0]
matches = {'Fullname':['Sasel - Dassendorf']*val,
'HomeTeam':['Sasel']*val,
'AwayTeam':['Dassendorf']*val}
matches_df = pd.DataFrame(matches)
艺术
matches = {'Fullname':['Sasel - Dassendorf'],'HomeTeam':['Sasel'],'AwayTeam':['Dassendorf']}
matches_df = pd.DataFrame(matches).reindex(range(val), method='ffill')
print (matches_df)
Fullname HomeTeam AwayTeam
0 Sasel - Dassendorf Sasel Dassendorf
1 Sasel - Dassendorf Sasel Dassendorf
2 Sasel - Dassendorf Sasel Dassendorf
3 Sasel - Dassendorf Sasel Dassendorf
4 Sasel - Dassendorf Sasel Dassendorf
5 Sasel - Dassendorf Sasel Dassendorf
6 Sasel - Dassendorf Sasel Dassendorf
7 Sasel - Dassendorf Sasel Dassendorf
8 Sasel - Dassendorf Sasel Dassendorf
9 Sasel - Dassendorf Sasel Dassendorf
如果两个 DataFrame 中的行数相同,并且需要使用列进行复制,请将 Index.repeat
与 DataFrame.loc
一起使用:Nums
data = [10, 7]
booklines = pd.DataFrame(data,columns=['Nums'])
print (booklines)
Nums
0 10
1 7
matches = {'Fullname':['Sasel - Dassendorf', 'Sasel - Dassendorf'],
'HomeTeam':['Sasel', 'Dassendorf'],
'AwayTeam':['Dassendorf', 'Sasel']}
matches_df = pd.DataFrame(matches)
print (matches_df)
Fullname HomeTeam AwayTeam
0 Sasel - Dassendorf Sasel Dassendorf
1 Sasel - Dassendorf Dassendorf Sasel
df = matches_df.loc[matches_df.index.repeat(booklines['Nums'])]
print (df)
Fullname HomeTeam AwayTeam
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
0 Sasel - Dassendorf Sasel Dassendorf
1 Sasel - Dassendorf Dassendorf Sasel
1 Sasel - Dassendorf Dassendorf Sasel
1 Sasel - Dassendorf Dassendorf Sasel
1 Sasel - Dassendorf Dassendorf Sasel
1 Sasel - Dassendorf Dassendorf Sasel
1 Sasel - Dassendorf Dassendorf Sasel
1 Sasel - Dassendorf Dassendorf Sasel
最后用于默认索引:
df = df.reset_index(drop=True)
评论
0赞
Paul Corcoran
10/12/2022
谢谢 有没有办法查找包含值 10 的 Booklines DataFrame 来执行此操作?
0赞
jezrael
10/12/2022
@PaulCorcoran - 你需要提取它吗?booklines['Nums'].iat[0]
1赞
Paul Corcoran
10/12/2022
谢谢 df = matches_df.loc[matches_df.index.repeat(booklines['Nums'])] 这是我想要的行
1赞
jezrael
10/12/2022
@PaulCorcoran - 超级棒!
评论