【发布时间】:2025-12-04 06:15:01
【问题描述】:
所以我有 2 个数据框,它们都具有相同的索引和列。我修改了第一个,我希望以某种方式索引第二个,以便它现在是第一个的长度。第一个的代码如下:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'a': ['.81', '1.2', '.67', '.78'],
'b': ['.2', '-.9', '.7', '.89'],
'c': ['.3', '.22', '.4', '.98'],
'd': ['.5', '.45', '.34', '.92']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'a': ['1', '2', '3', '4'],
'b': ['9', '7', '6', '5'],
'c': ['1', '14', '9', '5'],
'd': ['3', '12', '2', '34']},
index=[0, 1, 2, 3])
count=0
for i in df1.index:
d = pd.DataFrame()
d = df1.iloc[[count]]
count = count+1
d = d.T
d.columns = ['Dates']
try:
d.sort_values(by=['Dates'], inplace=True)
except KeyError:
print(KeyError)
d.dropna(inplace=True)
d['Dates'] = d['Dates'][:10]
print(d)
count = 0
for y in df2.index:
df = pd.DataFrame()
df = df2.iloc[[count]]
count = count+1
df = df.T
df.columns = ['Dates']
df.dropna(inplace=True)
print(df)
Df1 for 循环的输出为:
Dates
b .2
c .3
d .5
a .81
Dates
b -.9
c .22
d .45
a 1.2
Dates
d .34
c .4
a .67
b .7
Dates
a .78
b .89
d .92
c .98
Df2 的输出为:
Dates
a 1
b 9
c 1
d 3
Dates
a 2
b 7
c 14
d 12
Dates
a 3
b 6
c 9
d 2
Dates
a 4
b 5
c 5
d 34
如代码所示,我按从小到大的顺序组织行,然后索引出索引的前 10 行。我知道在这段代码中,许多行不超过 10 个值,但我需要像这样索引的原因是当我使用更大的数据集时,这将是一个问题。所以现在我想使用第一个数据帧的索引来索引第二个数据帧中的值。所以现在说如果第二个数据帧有 30 行,它现在只有 10 行,它基于第一个数据帧的 10。
编辑: 问题是这样的: 对于 df1.index 中的 i: #创建10个新数据框 d = pd.DataFrame() d = df1.iloc[[count]] 计数=计数+1 所以现在这段代码正在做的是基于一个更大的数据框创建 10 个新的数据框。因此,如果我在第二个 for 循环中使用 .loc ,它看起来像: 对于 df2.index 中的 i: #创建10个新数据框 df = pd.DataFrame() df = df2.iloc[[count]] 计数=计数+1 那么如果在第二个 for 循环中你会说 d.loc,这将是一个问题,因为 d 等于在 for 循环中创建的最后一个数据帧,而不是所有数据帧。
【问题讨论】:
-
请提供一个最小的可重现示例;这样做会更容易为您提供帮助!
-
感谢您对@zabop 的回复,我可以尝试通过为更少的 2 个 for 循环创建输出来做到这一点。我已经尝试从主代码中将其最小化,并且我尝试在另一个较小的数据集上执行此操作,但我找不到正确执行此操作的方法。是否会创建更小的输出来帮助您解决问题?
-
是的,创建一个类似于这个问题的 df:*.com/q/63583502/8565438 :)
-
好的,谢谢
-
刚刚发现,也有用:*.com/questions/20109391/…
标签: python pandas dataframe indexing