Series
(或df = pd.DataFrame([[[1,3], [2,3,4], [1,4,2,5]]], columns=['A', 'B', 'C']).T
print(df)
)由列表组成,如下所示:
0
A [1, 3]
B [2, 3, 4]
C [1, 4, 2, 5]
输出:
0
A 1
A 2
B 2
B 3
B 4
C 1
C 4
C 2
C 5
如何将其转换为
apply()
我曾尝试使用[('A', 1), ('A', 3), ..]
,但这并不常用。我可以隐式转换吗?我还尝试将所有数字提取为from_records()
的元组pd.DataFrame.from_records(df[0].map(lambda x: [(0, v) for v in x]).sum())
,但我也无法做到这一点。
我想我可以这样做:
(0, v)
但我不知道如何访问索引.. note (x.index, v)
实际上应该是'components' => [
... // config
'response' => [
'format' => \yii\web\Response::FORMAT_JSON
],
... // config
]
。
答案 0 :(得分:1)
需要在列中展平值,然后按df = pd.DataFrame({0:np.concatenate(df.iloc[:, 0].values.tolist())},
index=df.index.repeat(df[0].str.len()))
的{{3}} repeat
进行len
索引:
from itertools import chain
df=pd.DataFrame({0:list(chain.from_iterable(df.iloc[:, 0].values.tolist()))},
index=df.index.repeat(df[0].str.len()))
print (df)
0
A 1
A 3
B 2
B 3
B 4
C 1
C 4
C 2
C 5
np.random.seed(456)
N = 100000
a = [list(range(np.random.randint(5, 20))) for _ in range(N)]
L = list('abcdefghijklmno')
df = pd.DataFrame({0:a}, index=np.random.choice(L, size=N))
print (df)
In [348]: %timeit pd.DataFrame({0:np.concatenate(df.iloc[:, 0].values.tolist())}, index=df.index.repeat(df[0].str.len()))
1 loop, best of 3: 218 ms per loop
In [349]: %timeit pd.DataFrame({0:list(chain.from_iterable(df[0].values.tolist()))}, index=df.index.repeat(df[0].str.len()))
1 loop, best of 3: 388 ms per loop
In [350]: %timeit pd.DataFrame(df.iloc[:, 0].tolist(), index=df.index).stack().reset_index(level=1, drop=1).to_frame().astype(int)
1 loop, best of 3: 384 ms per loop
<强>计时强>:
while ((bytesRead = inputStream.read(content)) != -1) {
答案 1 :(得分:1)
使用pd.DataFrame
+ stack
+ reset_index
+ to_frame
:
df = pd.DataFrame(df.iloc[:, 0].tolist(), index=df.index)\
.stack().reset_index(level=1, drop=1).to_frame()
df
0
A 1.0
A 3.0
B 2.0
B 3.0
B 4.0
C 1.0
C 4.0
C 2.0
C 5.0